Warum nicht eval () JSON?

8

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.

    
NikiC 24.11.2010, 19:13
quelle

6 Antworten

7

Es gibt eine Reihe von Möglichkeiten, wie Ihre Sicherheit beeinträchtigt werden kann.

  • Man in the middle attacks könnte theoretisch den Inhalt von Daten ändern, die an den Client geliefert werden.
  • Ihr Serververkehr könnte an anderer Stelle abgefangen werden und es könnten andere Inhalte bereitgestellt werden (nicht ganz so wie bei einem MIM-Angriff)
  • Ihr Server könnte kompromittiert werden und die Datenquelle könnte manipuliert werden.

und das sind nur die einfachen Beispiele. XSS ist böse.

"eine Unze der Prävention ist ein Pfund Heilung wert"

    
zzzzBov 24.11.2010, 19:19
quelle
9

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?

    
Matthew Vines 24.11.2010 19:16
quelle
3

Neben den offensichtlichen Sicherheitsproblemen:

  1. Natives JSON ist schneller
  2. Sie müssen keinen JSON-Parser "laden", es ist nur ein weiterer Funktionsaufruf für die JavaScript-Engine
Ivo Wetzel 24.11.2010 19:17
quelle
0

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.

    
Ali Tarhini 24.11.2010 19:18
quelle
0

Schau dir das an: Ссылка

so zumindest für Firefox können Sie den eingebauten JSON-Parser

verwenden     
Daniel 24.11.2010 19:18
quelle
-2

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.

    
Camilo Martin 08.12.2010 03:51
quelle

Tags und Links