Die Injektion von javascript in JSON und Sicherheit
Habe ich einen online-Dienst, wo Benutzer erstellen können, die json-Dokumente gesichert. Diese werden dann auf einem server gespeichert und können von anderen Benutzern geladen werden. Das json wird dann dekodiert, genau so, wie es eingereicht wurde. Gibt es irgendwelche Sicherheitsrisiken im Falle, dass ein Benutzer Stampfer mit dem json, bevor Sie es abschicken und spritzt beliebigen javascript-Code, der dann ausgeführt wird, auf den Zuschauer' browser? Ist das überhaupt möglich? das ist es, was ich brauche, um zu wissen, ob dies möglich ist, oder zur willkürlichen Ausführung von javascript aus einer json-Zeichenfolge ist möglich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
JSON traditionell wurde analysiert mit einem
eval()
Aussage, die in etwa so unsicher, wie es möglich ist, zu bekommen. Wenn Sie zulassen, Ihre Anwendung unsicher.eval()
überhaupt?Dies hängt ganz davon ab, a) ob Sie jetzt die JSON auf server-Seite, und (noch mehr) auf b) wie bist du Dekodierung von JSON auf der client-Seite, wenn Sie erneut laden.
Code, der verwendet
eval()
Deserialisieren des JSON in ein Javascript-Objekt ist offen, die genau die angreifen, die Sie beschreiben.Code, der verwendet JSONP zum laden der JSON - (dh Weitergabe der JSON als Javascript-literal zu einer benannten callback-Funktion) ist offen für den Angriff, die Sie beschreiben (es ist effektiv dasselbe wie die Verwendung
eval()
).Robustesten JSON-parsing-Mechanismen (z.B. json2.js die jQuery
$.parseJSON
Funktion oder nativeJSON.parse()
Funktionen in Browsern, die es unterstützen) wird nicht akzeptieren, JSON, die nicht Folgen Sie den JSON-Spezifikation. Also, wenn Sie eine Bibliothek zum Parsen der JSON-string, können Sie sicher sein.Egal, wie Sie beabsichtigen, laden Sie die JSON-auf der client-Seite, es ist eine gute Praxis, Peeling jeden Benutzer eingereichte Inhalte auf der server-Seite. In diesem Fall können Sie server-side-code, um zu überprüfen, dass die JSON-auch gültig ist (z.B. mit
json.loads(user_submitted_json)
in Python und abfangen von Fehlern).Also mit etwas Sorgfalt sowohl auf der server-Seite und client-Seite, sollten Sie in der Lage sein, dies sicher zu machen.
JSON.parse
Implementierung zunächst, falls dies möglich ist.JSON sans eval wurde so entwickelt, um Probleme mit fehlerhaften JSON, während man noch effizienter zu analysieren.