Kodėl "Google" prie JSON atsakymų prideda while(1);?

Kodėl "Google" prie savo (privačių) JSON atsakymų prideda while(1);?

Pavyzdžiui, čia pateikiamas atsakas, kai įjungiamas ir išjungiamas kalendorius Google Calendar:

while(1);[['u',[['smsSentFlag','false'],['hideInvitations','false'],
  ['remindOnRespondedEventsOnly','true'],
  ['hideInvitations_remindOnRespondedEventsOnly','false_true'],
  ['Calendar ID stripped for privacy','false'],['smsVerifiedFlag','true']]]]

Manyčiau, kad taip siekiama neleisti žmonėms atlikti eval(), bet iš tikrųjų tereikėtų pakeisti while ir viskas būtų paruošta. Manyčiau, kad eval prevencija skirta užtikrinti, kad žmonės rašytų saugų JSON parsavimo kodą.

Mačiau, kad tai naudojama ir keliose kitose vietose, bet daug dažniau "Google" ("Mail", "Calendar", "Contacts" ir t. t.) Keista, kad Google Docs vietoj to prasideda &&&&&START&&&&&, o "Google Contacts", atrodo, prasideda while(1); &&&&&START&&&&.

Kas čia vyksta?

Taip užtikrinama, kad kita svetainė negalėtų imtis bjaurių gudrybių ir bandyti pavogti jūsų duomenis. Pavyzdžiui, pakeitus masyvo konstruktorių ir įtraukus šį JSON URL per <script> žymą, kenkėjiška trečiosios šalies svetainė galėtų pavogti JSON atsakymo duomenis. Įdėjus while(1); pradžioje, scenarijus bus sustabdytas.

Kita vertus, naudojant XHR ir atskirą JSON analizatorių, tos pačios svetainės užklausa gali lengvai ignoruoti while(1); priešdėlį.

Komentarai (10)

Taip būtų apsunkinta galimybė trečiajai šaliai įterpti JSON atsakymą į HTML dokumentą naudojant <script> žymą. Atminkite, kad <script> žyma yra atleista nuo tos pačios kilmės politikos.

Komentarai (4)

Pastaba: nuo 2019 m. daugelis senų pažeidžiamumų, dėl kurių buvo imtasi šiame klausime aptartų prevencinių priemonių, šiuolaikinėse naršyklėse nebeveikia. Toliau pateiktą atsakymą paliksiu kaip istorinį įdomumą, tačiau iš tiesų visa ši tema nuo 2010 m. (!!!), kai buvo užduotas šis klausimas, iš esmės pasikeitė.


Tai neleidžia jo naudoti kaip paprastos <script> žymės taikinio. (Na, tai neužkerta kelio, bet padaro tai nemalonų.) Tokiu būdu blogi vyrukai negali paprasčiausiai įdėti tos skriptų žymos į savo svetainę ir pasikliauti aktyvia sesija, kad būtų galima gauti jūsų turinį.

redaguoti — atkreipkite dėmesį į komentarą (ir kitus atsakymus). Problema susijusi su iškraipytomis integruotomis priemonėmis, konkrečiai Object ir Array konstruktoriais. Juos galima pakeisti taip, kad analizuojant nekenksmingą JSON gali būti paleistas užpuoliko kodas.

Komentarai (1)