molily: Verständnisproblem JSON

Beitrag lesen

Es ist grundsätzlich keine so gute Idee, skriptgesteuert wirklich nacktes JSON auszugeben

Jein.

wenn vorher das Standardverhalten beim Erzeugen neuer Objekte ein wenig abgeändert wurde

Das funktioniert allerdings nur in einigen Browsern, und die haben es mittlerweile aus Sicherheitsgründen deaktiviert.

Das verhindert man am einfachsten, indem man den JSON-String in einen Javascript-Kommentar setzt, und diese Kommentarzeichen per String-Operation vor dem eval() wieder entfernt.

Der Kommentar müsste das JSON ja »kaputt« machen, sodass es kein ausführbares JavaScript mehr ist. Also kein (korrekter) JavaScript-Kommentar, sondern <blablub>...</blablub>, crashme();, throw "nönö!"; oder so etwas.

Eigentlich reicht es aus, wenn man direkt { ... } schreibt, ohne Klammern. Und nicht [ ... ] schreibt, auch wenn das gemäß JSON erlaubt wäre. Dann ist der Code nur mit eval() zu verarbeiten, beim Einbinden als Script löst er den besagten Fehler aus. Die Klammern werden dann beim eval() hinzugefügt bzw. sind im Falle der Nutzung einer nativen oder eigenen (d.h. Crockfords) JSON-Implementierung unnötig.

Am besten verhindert man solche Angriffe mit serverseitigem CSRF-Schutz, der auch viele andere Fälle abdeckt.

Mathias