Soweit ich weiß, wird es aus Sicherheitsgründen als schlecht erachtet, eval()
JSON-Objekte in JavaScript zu verwenden. Ich kann diese Sorge verstehen, wenn das JSON von einem anderen Server kommt.
Aber wenn der JSON von meinem eigenen Server bereitgestellt wird und mit PHP json_encode
erstellt wird (nehmen wir an, dass es nicht fehlerhaft ist), ist es legitim, einfach eval()
zu verwenden, um den JSON in JS zu lesen oder gibt es irgendwelche Sicherheitsproblem kann ich mir derzeit nicht vorstellen?
Ich möchte wirklich nicht mit dem dynamischen Laden eines JSON-Parsers umgehen und würde mich freuen, einfach eval()
zu benutzen.
PS: Ich werde natürlich das native JSON
-Objekt verwenden, wenn es verfügbar ist, aber ich möchte auf eval()
für IE / Opera zurückgreifen.
Es gibt eine Reihe von Möglichkeiten, wie Ihre Sicherheit beeinträchtigt werden kann.
und das sind nur die einfachen Beispiele. XSS ist böse.
"eine Unze der Prävention ist ein Pfund Heilung wert"
In Ihrem Szenario stellt sich die Frage, woher PHP das Javascript ausführen soll? Ist dieser Kanal sicher und frei von möglichen Benutzermanipulationen? Was, wenn Sie diesen Kanal nicht direkt kontrollieren?
Neben den offensichtlichen Sicherheitsproblemen:
Tipp: in asp.net mit JSON wird als schlecht angesehen, weil das Parsen von DateTime zwischen dem Server und dem Client unterscheidet. Daher verwenden wir eine spezielle Funktion, um das Datum in Javascript zu deserialisieren. Ich bin nicht sicher, ob PHP das gleiche Problem hat, aber es ist erwähnenswert.
Ernsthaft? Einige der Leute hier sind paranoid. Wenn Sie JSON bereitstellen und wissen, dass es sicher ist, ist es in Ordnung, fallback (*) auf eval();
anstelle einer js-lib für IE zu setzen. Immerhin müssen IE-Benutzer sich viel mehr Gedanken machen.
Und das Man-in-the-Middle-Argument ist bullsh * t.
(*) Die Wörter Fallback und safe sind fett gedruckt, weil einige Leute sie nicht gesehen haben.
Tags und Links javascript json eval