Warum Google while(1); in JSON einfügt und wie man nicht darauf hereinfällt

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum Google while(1); in JSON einfügt und wie man nicht darauf hereinfällt: Top-Fehler von JavaScript-Entwicklern



Wenn Sie jemals in der Entwicklerkonsole bei der Arbeit mit der Google API oder einfach beim Googeln seltsamer Serverantworten waren, ist Ihnen sicherlich so etwas aufgefallen:



while(1);["some","data"]


Sieht aus wie eine Endlosschleife, die den Browser zum Absturz bringt, oder? Tatsächlich handelt es sich jedoch um einen genialen Schutzmechanismus. Lassen Sie uns verstehen, warum Google while(1) an JSON voranstellt, welche Fehler Entwickler bei der Arbeit mit solchen Antworten machen und wie man sie vermeidet.



Diese Frage ist eine der beliebtesten auf Stack Overflow (tausende Aufrufe) und das zu Recht. Sie betrifft nicht nur technische Feinheiten, sondern auch grundlegende Prinzipien der Websicherheit.



Was ist while(1); in JSON und woher kommt es?



Beginnen wir mit dem Wesentlichen. Google stellt while(1) an JSON voran, nicht um Ihren Code zu zerstören, sondern zum Schutz vor einem Angriff namens JSON Hijacking (JSON-Entführung).



Stellen Sie sich die guten alten Zeiten vor, als Websites JSON-Arrays der obersten Ebene verwendeten (z. B. [{"user":"admin","token":"secret"}]). Ein Angreifer konnte den globalen Konstruktor Array oder Object überschreiben und Daten über ein <script>-Tag stehlen. Der Browser führte JSON als JavaScript aus, und die Daten wurden abgegriffen.



Die Lösung von Google: das Hinzufügen des Präfixes while(1);. Dies macht JSON zu ungültigem JavaScript (eine Endlosschleife verhindert die Ausführung des schädlichen Skripts), aber das JSON selbst bleibt korrekt – es muss nur richtig geparst werden, indem das Präfix entfernt wird.



Heute ist diese Praxis für viele große APIs zum Sicherheitsstandard geworden. Aber wenn Sie nichts davon wissen, kann Ihr Code kaputtgehen.



Top-5 Fehler von JavaScript-Entwicklern bei der Arbeit mit geschütztem JSON



Fehler Nr. 1: Versuch, die Antwort direkt zu parsen



Der häufigste Fehler: Der Entwickler erhält die Antwort vom Server und übergibt sie sofort an JSON.parse(). Das Ergebnis ist ein Parsing-Fehler, da while(1); kein gültiges JSON ist.



fetch('https://api.google.com/some-endpoint')  .then(response => response.text())  .then(data => {    // Fehler! JSON.parse wird fehlschlagen    const parsed = JSON.parse(data);    console.log(parsed);  })  .catch(err => console.error('Parsing-Fehler:', err));


Wie man es vermeidet: Entfernen Sie immer das Präfix while(1); vor dem Parsen.



fetch('https://api.google.com/some-endpoint')  .then(response => response.text())  .then(data => {    // Entfernen des Schutzpräfixes    const cleanJson = data.replace(/^\\)?\\s*while\\s*\\(\\s*1\\s*\\)\\s*;\\s*/, '');    const parsed = JSON.parse(cleanJson);    console.log(parsed);  })  .catch(err => console.error('Parsing-Fehler:', err));


Fehler Nr. 2: Verwendung von response.json() ohne Verarbeitung



Die Methode response.json() in der Fetch API erwartet reines JSON. Wenn der Server while(1);... zurückgibt, löst response.json() eine Ausnahme aus. Entwickler denken oft, dies sei ein API-Fehler und keine Sicherheitsfunktion.



// Dieser Code wird mit "Unexpected token w" fehlschlagenfetch('https://api.google.com/endpoint')  .then(response => response.json()) // Fehler!  .then(data => console.log(data));


Wie man es vermeidet: Verwenden Sie response.text() und entfernen Sie dann manuell das Präfix.



fetch('https://api.google.com/endpoint')  .then(response => response.text())  .then(text => {    const jsonText = text.replace(/^\\)?\\s*while\\s*\\(\\s*1\\s*\\)\\s*;\\s*/, '');    return JSON.parse(jsonText);  })  .then(data => console.log(data));


Fehler

Blogs

Buchempfehlungen