Kodėl „Google“ priduria, kol (1); atsakymus į „Json“ atsakymus?

Kodėl „Google“ priduria, while(1); (savo) JSON atsakymuose?

Pavyzdžiui, čia pateikiamas atsakymas, kai įjungiate arba išjungiate kalendorių „ Google“ kalendoriuje :

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

Norėčiau pasiūlyti, kad jis neleidžia žmonėms tai daryti eval() , bet viskas, ką jums reikia, yra pakeisti, o tada turėtumėte nustatyti. Manau, kad užkirsti kelią eval yra užtikrinti, kad žmonės rašytų saugų JSON analizavimo kodą.

Mačiau, kad ji buvo naudojama keliose kitose vietose, bet daug daugiau su „Google“ (paštas, kalendorius, kontaktai ir kt.). Keista, kad „ Google“ dokumentai prasideda > , o „Google“ kontaktai prasideda while(1); > while(1); > .

Kas čia vyksta?

3651
19 апр. „Jess“ įkūrė balandžio 19 d 2010-04-19 21:00 '10 21:00 val. 2010-04-19 21:00
@ 6 atsakymai

Jis apsaugo JSON užgrobimą , rimtą JSON saugumo problemą, kuri nuo 2011 m . Oficialiai nustatyta visose pagrindinėse naršyklėse, naudojant EMCA5.

Pavyzdys: tarkime, kad „Google“ turi URL, pvz., mail.google.com/json?action=inbox kuris grąžina pirmąsias 50 žinučių iš „ mail.google.com/json?action=inbox pašto dėžutės JSON formatu. Kitose srityse esančios blogos svetainės negali siųsti AJAX užklausų gauti šiuos duomenis dėl tos pačios kilmės politikos, tačiau gali įtraukti URL per <script> . URL aplanko jūsų slapukai, ir, nepaisydami pasaulinio masyvo konstruktoriaus ar prieigos metodų, jie gali turėti metodą, vadinamą, kai yra nustatytas objekto atributas (masyvas arba maišos), kad jie galėtų perskaityti JSON turinį.

while(1); Arba „ > neleidžia: AJAX užklausa „ mail.google.com turės visišką prieigą prie teksto turinio ir gali jį pašalinti. Bet <script> įterpimas aklai atlieka „JavaScript“ be jokio apdorojimo, todėl atsiranda begalinė kilpa ar sintaksės klaida.

Tai neišsprendžia kryžminio prašymo klastojimo problemos .

3884
19 апр. atsakymas pateikiamas balandžio 19 d. 2010-04-19 21:11 '10, 21:11, 2010-04-19 21:11

Tai neleidžia atsakymui atskleisti per JSON užgrobimą.

Teoriškai HTTP atsakymų turinį saugo ta pati kilmės politika: vieno domeno puslapiai negali gauti informacijos iš kitų domenų puslapių fragmentų (nebent tai yra aiškiai leidžiama).

Užpuolikas gali jūsų vardu pareikalauti puslapių kituose domenuose, pavyzdžiui, naudodamas <script src=...> arba <img> , bet jis negali gauti jokios informacijos apie rezultatą (antraštes, turinį).

Taigi, jei apsilankysite užpuoliko puslapyje, jis negalės skaityti jūsų el. Laiško iš „gmail.com“.

Išskyrus tai, kad naudojant scenarijų žymą JSON turiniui prašyti, JSON vykdomas kaip „Javascript“ atakuotojoje valdomoje aplinkoje. Jei užpuolikas gali pakeisti Array arba Object konstruktorių arba kitą metodą, naudojamą objekto statybos metu, viskas JSON bus perduodama per užpuoliko kodą ir bus atskleista.

Atkreipkite dėmesį, kad tai vyksta vykdant JSON, kaip „Javascript“, o ne analizės metu.

Yra keletas atsakomųjų priemonių:

Įsitikinkite, kad JSON niekada nevykdoma.

Kai kurie while(1); Pareiškimas prieš JSON duomenis, „Google“ garantuoja, kad JSON duomenys niekada nebus vykdomi kaip „Javascript“.

Tik teisinis puslapis iš tikrųjų gali gauti visą turinį, pašalindamas while(1); ir analizuokite likusią dalį kaip JSON.

Tokie dalykai kaip for(;;); Pavyzdžiui, buvo matyti „Facebook“ su tais pačiais rezultatais.

Įsitikinkite, kad JSON negalioja „JavaScript“

Be to, negaliojančių žetonų pridėjimas prieš JSON, pvz., > , užtikrina, kad jis niekada nebus įvykdytas.

Visada grąžinkite JSON su Objektu išorėje

Tai yra OWASP rekomenduojamas būdas apsaugoti nuo JSON įsilaužimo ir yra mažiau įsibrovus.

Kaip ir ankstesnėse atsakomosiose priemonėse, ji užtikrina, kad JSON niekada nebus vykdomas kaip „Javascript“.

„Javascript“ neleidžiamas galiojantis JSON objektas, jei jis nėra įtrauktas į bet kurį

 eval('{"foo":"bar"}') // SyntaxError: Unexpected token : 

Tačiau tai galioja JSON:

 JSON.parse('{"foo":"bar"}') // Object {foo: "bar"} 

Taigi, užtikrindami, kad visuomet grąžinate Objektą aukščiausiame atsakymo lygmenyje, įsitikinkite, kad „JSON“ nėra galiojantis „Javascript“, bet jis lieka galioti JSON.

Kadangi @hvd pažymi komentaruose, tuščias {} objektas galioja „Javascript“, o žinant, kad objektas tuščias, savaime gali būti vertinga informacija.

Pirmiau minėtų metodų palyginimas

OWASP metodas yra mažiau įsibrovus, nes jam nereikia keisti kliento bibliotekos ir perduoti galiojantį JSON. Tačiau nėra žinoma, ar ankstesnės ar būsimos naršyklės klaidos gali nugalėti. Kaip pažymėjo @oriadam, neaišku, ar duomenys gali būti praleisti dėl apdorojimo klaidų apdorojant klaidas (pvz., Window.onerror).

„Google“ metodas reikalauja, kad kliento biblioteka palaikytų automatinį deserializavimą ir gali būti laikoma saugesne naršyklės klaidų požiūriu.

Abu metodai reikalauja serverio pusės pakeitimų, kad kūrėjai negalėtų netyčia siųsti pažeidžiamų JSON.

480
02 февр. atsakymas įdėtas arnaud576875 02 vasaris 2014-02-02 15:09 '14 at 15:09 2014-02-02 15:09

Tai daroma taip, kad kai kuri kita svetainė negalėtų atlikti nemalonių gudrybių, kad bandytų pavogti jūsų duomenis. Pavyzdžiui, pakeitus masyvo konstruktorių , tada įtraukiant šį JSON URL <script> , kenkėjiškos trečiosios svetainės svetainė gali pavogti duomenis iš JSON atsakymo. Pateikimas while(1); pradžioje bus scenarijus.

Tuo pačiu - svetainės užklausa naudojant XHR, o atskiras JSON analizatorius, kita vertus, gali lengvai ignoruoti priešdėlį, while(1); .

349
16 мая '09 в 5:08 2009-05-16 05:08 atsakė bdonlan'ui gegužės 09 d., 05:08, 2009-05-16 05:08

Trečiosioms šalims būtų sunku įtraukti JSON atsakymą į HTML dokumentą su <script> . Atminkite, kad <script> atleista nuo tos pačios kilmės taisyklių .

101
19 апр. Daniel Vassallo atsakymas 19 d 2010-04-19 21:04 '10, 21:04, 2010-04-19 21:04

Tai neleidžia naudoti kaip paprasto <script> . (Na, tai jums netrukdo, bet tai sukelia nemalonus.) Taigi, blogi vaikinai negali tiesiog įdėti šio scenarijaus žymos į savo svetainę ir pasikliauti aktyvia sesija, kad galėtumėte gauti turinį.

redaguoti - pažymėkite komentarą (ir kitus atsakymus). Problema susijusi su trikdančiais integruotais objektais, ypač su Object ir „ Array konstruktoriais. Jie gali būti modifikuoti taip, kad kitaip nekaltas JSON analizėje galėtų pavadinti užpuoliko kodą.

68
19 апр. Atsakyti Pointy balandžio 19 2010-04-19 21:02 '10 ne 21:02 2010-04-19 21:02

Kadangi <script> atleista nuo tos pačios kilmės politikos, kuri yra būtinybė saugumui žiniatinklio pasaulyje, while(1) kai JSON pridedamas prie atsakymo, neleidžia jo neteisingai naudoti <script> .

7
18 авг. atsakymas duotas kg11 18 rug . 2017-08-18 07:14 '17 7:14 am 2017-08-18 07:14

Peržiūrėkite kitus klausimus apie „ žymes arba užduokite klausimą