Prečo spoločnosť Google do svojich (súkromných) odpovedí JSON pridáva while(1);
?
Napríklad tu je odpoveď pri zapínaní a vypínaní kalendára v Kalendári Google:
while(1);[['u',[['smsSentFlag','false'],['hideInvitations','false'],
['remindOnRespondedEventsOnly','true'],
['hideInvitations_remindOnRespondedEventsOnly','false_true'],
['Calendar ID stripped for privacy','false'],['smsVerifiedFlag','true']]]]
Predpokladám, že je to preto, aby sa zabránilo ľuďom, aby na ňom vykonali eval()
, ale všetko, čo by ste museli urobiť, je nahradiť while
a potom by ste boli pripravení. Predpokladám, že prevencia eval má zabezpečiť, aby ľudia písali bezpečný kód na parsovanie JSON.
Videl'som, že sa to používa aj na niekoľkých iných miestach, ale oveľa viac v prípade Google (Mail, Kalendár, Kontakty atď.) Je zvláštne, že Dokumenty Google začínajú namiesto &&&START&&&&
a Kontakty Google zrejme začínajú while(1); &&&&START&&&
.
Čo sa tu deje?
Tým sa zabezpečí, že niektoré iné stránky nebudú môcť robiť nepríjemné triky a pokúšať sa ukradnúť vaše údaje. Napríklad nahradením konštruktora poľa a následným zahrnutím tejto adresy JSON prostredníctvom značky <script>
by mohla škodlivá stránka tretej strany ukradnúť údaje z odpovede JSON. Umiestnením príkazu while(1);
na začiatok sa skript namiesto toho zavesí.
Na druhej strane, požiadavka tej istej stránky, ktorá používa XHR a samostatný analyzátor JSON, môže prefix while(1);
ľahko ignorovať.
To by malo tretej strane sťažiť vloženie odpovede JSON do dokumentu HTML pomocou značky <script>
. Nezabudnite, že tag <script>
je vyňatý z Same Origin Policy.
Poznámka: od roku 2019 už mnohé zo starých zraniteľností, ktoré viedli k preventívnym opatreniam uvedeným v tejto otázke, nie sú v moderných prehliadačoch problémom. Odpoveď nižšie ponechám ako historickú zaujímavosť, ale v skutočnosti sa celá téma od roku 2010 (!!), keď bola táto otázka položená, radikálne zmenila.
Bráni tomu, aby bol použitý ako cieľ jednoduchej značky <script>
. (No, nezabráni tomu, ale znepríjemní to.) Takto zlí ľudia nemôžu jednoducho'umiestniť tento skriptovací tag na svoju vlastnú stránku a spoliehať sa na aktívnu reláciu, ktorá umožní načítanie vášho obsahu.
edit — všimnite si komentár (a ďalšie odpovede). Problém súvisí s podvrhnutými vstavanými zariadeniami, konkrétne s konštruktormi Object
a Array
. Tie sa dajú pozmeniť tak, že inak neškodný JSON by mohol pri rozbore spustiť kód útočníka.