Mein Spider Sense warnt mich, dass eval()
es eine schlechte Idee ist, eingehende JSONs zu analysieren. Ich frage mich nur, ob JSON.parse()
- was meiner Meinung nach Teil von JavaScript und keine browserspezifische Funktion ist - sicherer ist.
javascript
json
Kevin Major
quelle
quelle
JSON.parse
ist es schneller alseval
zumindest in V8 (Chromiums JS-Engine). Quelle .Antworten:
Sie sind anfälliger für Angriffe, wenn Sie
eval
Folgendes verwenden : JSON ist eine Teilmenge von Javascript, und json.parse analysiert nur JSON, währendeval
die Tür für alle JS-Ausdrücke offen bleibt .quelle
eval('alert(1)');
.Alle
JSON.parse
Implementierungen werden höchstwahrscheinlich verwendeteval()
JSON.parse
basiert auf der Lösung von Douglas Crockford , dieeval()
genau dort in Zeile 497 verwendet wird .Der Vorteil von
JSON.parse
ist, dass überprüft wird, ob das Argument die richtige JSON-Syntax hat.quelle
JSON.parse()
in Firefox 28 und Chromium 33 auf meinem Linux Mint-System getestet . Es war 2x so schnell wieeval()
in Firefox und 4x so schnell in Chrom. Ich bin nicht sicher, welchen Quellcode Sie veröffentlichen, aber sie sind in meinen Browsern nicht dasselbe.JSON.parse()
Implementierung, die sicherer und schneller ist alseval()
Parser auf Basis.Nicht alle Browser bieten native JSON-Unterstützung, daher müssen Sie manchmal
eval()
die JSON-Zeichenfolge verwenden. Verwenden Sie den JSON-Parser von http://json.org, da dies alles für Sie viel einfacher macht.Eval()
ist ein Übel, aber gegen einige Browser ist es ein notwendiges Übel, aber wo Sie es vermeiden können, tun Sie dies !!!!!quelle
Es gibt einen Unterschied zwischen dem, was JSON.parse () und eval () akzeptieren. Versuchen Sie es mit einer Bewertung:
var x = "{" einkaufenKartenname ":" einkaufskart: 2000 "}"
Siehe dieses Beispiel .
quelle
Wenn Sie den JSON mit analysieren
eval
, lassen Sie zu, dass die zu analysierende Zeichenfolge absolut alles enthält. Anstatt nur ein Datensatz zu sein, können Sie Funktionsaufrufe ausführen oder was auch immer.Außerdem
parse
akzeptiert JSON einen zusätzlichen Parameter, reviver, mit dem Sie angeben können, wie mit bestimmten Werten wie Datumsangaben umgegangen werden soll (weitere Informationen und Beispiele in der Inline-Dokumentation hier ).quelle
JSON ist nur eine Teilmenge von JavaScript. Aber
eval
wertet die volle Sprache JavaScript und nicht nur die Teilmenge , die JSON ist.quelle
JSON.parse
(direkt in die JavaScript-Engine implementierte) analysiert nur JSON. Andere nicht-native Implementierungen führen jedoch eine Überprüfung der Integrität durch und verwenden sie danneval
aus Leistungsgründen.