Ist die Desinfektion der JSON notwendig?
Ich denke, es ist eine bekannte best practice, die auf der web-Misstrauen, jede Eingabe. Der Satz
"All input is evil."
ist wahrscheinlich die am häufigsten zitierten Zitat mit Bezug auf input-Validierung. Nun, für HTML können Sie mit tools wie DOMPurify zu desinfizieren.
Meine Frage ist, wenn ich eine Node.js server mit Express und Körper-parser middleware zu empfangen und zu analysieren, JSON, brauche ich, um eine Hygienisierung?
Meine (vielleicht naive?) Gedanken hierzu sind, dass JSON ist, nur Daten, kein code, und wenn jemand sendet ungültige JSON -, Körper-parser (nutzt JSON.parse()
intern) wird nicht ohnehin, so weiß ich, dass meine app erhalten Sie ein gültiges JavaScript-Objekt. Solange ich nicht ausführen, eval auf, oder rufen Sie eine Funktion auf, ich sollte in Ordnung sein, sollte ich nicht?
Bin ich etwas fehlt?
InformationsquelleAutor Golo Roden | 2014-09-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Seit
JSON.parse()
läuft nicht jeder code, in dem Daten analysiert werden, so ist es nicht anfällig Wegeval()
ist, aber es gibt immer noch Dinge, die Sie tun sollten, zu schützen, die Integrität Ihrer server und Anwendungen wie:JSON.parse()
kann eine exception werfen.Also, um Ihre Frage zu beantworten, direkt, "ja" es gibt mehr zu tun als nur mit Körper-parser aber es ist ein völlig in Ordnung, front-line für die erste Verarbeitung der Daten. Die nächsten Schritte für das, was Sie mit den Daten machen, wenn Sie es bekommen von Körper-parser nicht egal, in vielen Fällen kann die zusätzliche Sorgfalt erfordern.
Als ein Beispiel, hier ist eine parsing-Funktion, die erwartet, dass ein Objekt mit Eigenschaften, gilt, dass einige dieser Prüfungen und gibt Ihnen eine gefilterte Ergebnis, dass nur die Eigenschaften enthält, die Sie erwartet hatten:
InformationsquelleAutor jfriend00
Sollten Sie in Ordnung sein. Frühe Anwender von JSON oft aufrufen von eval() auf den empfangenen string, das ist natürlich eine riesige Sicherheitslücke. Aber JSON.analysieren, wie Sie Stand, Griffen die Mehrheit der diese Arten von Plausibilitätsprüfungen.
So lange, wie Sie sicher nicht nehmen, etwas aus einer empfangenen JSON-Objekt und übergeben Sie es direkt in eine sql-Abfrage, zum Beispiel, sollten Sie in Ordnung sein.
InformationsquelleAutor Chris Tavares
Solange Sie mit
JSON.parse
kein code ausgewertet werdenSollten Sie noch whitelist alle Schlüssel /Wert-Paare, die Sie akzeptieren möchten, aus dem Analyseergebnis obwohl
JSON.parse
(wie Crockford ' s json2.js) verwendeneval
.Danke für die Erwähnung, aber die Lösung ist einfach: nicht benutzen.
neben dieser Frage ist insbesondere über code, verwendet die tatsächliche
JSON.parse()
im node.js. Es gibt keine polyfills hier beteiligt.InformationsquelleAutor user633183