Ich möchte einen Webservice über JSONP anbieten und frage mich, ob ich den Wert aus dem Callback-Parameter bereinigen muss.Muss ich den Rückrufparameter von einem JSONP-Aufruf bereinigen?
Mein aktueller Server-Seite Skript sieht wie folgt zur Zeit (mehr oder weniger-Code in PHP ist, aber wirklich alles sein könnte..):
header("Content-type: application/json; charset=utf-8");
echo $_GET['callback'] . '(' . json_encode($data) . ')';
Dies ist eine klassische XSS-Schwachstelle.
Wenn ich es sterilisieren muss, wie? Ich konnte nicht genügend Informationen darüber finden, was Callback-Strings zulässt. Ich führe aus Wikipedia:
Während die Polsterung (prefix) typischerweise der Name einer Rückruffunktion ist, die in den Ausführungskontext des Browsers definiert ist, es kann auch eine variable Zuordnung, eine if-Anweisung oder eine beliebige sein, anderes Javascript-Statement-Präfix.
gut aussieht. Ich werde es versuchen. –
Sie können ctype_alpha ($ _GET ['callback']) verwenden, um in diesem Fall leicht zu überprüfen, ob Sie in einem englischen Gebietsschema sind, ansonsten funktionieren die Filterfunktionen gut. Beachten Sie auch, dass die Kopfzeile auf 'content-type: application/json; charset = utf-8 ', wenn eine jsonp-Antwort zurückgegeben wird. – Josh
Korrigiert. Und danke für die Information. –