Niyə Google əlavə edir (1); Sizin json cavablar?

Niyə Google əlavə while(1); (özəl) JSON cavablarında?

Məsələn, Google Calendar-da təqvimini yandırdığınız və ya söndürdüyünüz zaman cavabdır:

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

İnsanlar bunu eval() imkan verməyəcəyini təklif edirəm, amma həqiqətən nə etmək lazımdırsa, əvəz edilsin və sonra təyin olunsun. Qiymətləndirmənin qarşısının alınması insanların təhlükəsiz JSON təhlil kodunu yazmasını təmin etməkdir.

Gördüm ki, bir çox başqa yerlərdə istifadə edilmişdi, amma Google ilə daha çox (Mail, Calendar, Contacts, və s.). Qeyri- > Google Docs > ilə başlayır və Google Kontaktlar while(1); > ilə başlayır while(1); > while(1); > .

Burada nə baş verir?

3651
19 апр. Jess 19 apreldə təyin etdi 2010-04-19 21:00 '10 saat 21:00 'da 2010-04-19 21:00' də
@ 6 cavablar

2011-ci ildən etibarən EMCA5- dən istifadə edərək bütün əsas brauzerlərdə rəsmən təsdiqlənmiş ciddi JSON təhlükəsizlik məsələsini JSON qaçırmağa mane olur.

Məsələn: Google-da mail.google.com/json?action=inbox kimi bir URL var, bu məktub mail.google.com/json?action=inbox qutusundan ilk 50 mesajı JSON formatında qaytarır. Digər domainlərdə olan pis saytlar eyni mənbələrin siyasəti səbəbindən bu məlumatları almaq üçün AJAX sorğu göndərə bilmir, lakin URL'yi <script> vasitəsilə daxil edə bilərlər. URL'ler çerezleriniz tərəfindən ziyarət edilir və qlobal array konstruktorunu və ya giriş metodlarını ləğv etməklə , JSON məzmununu oxumağa imkan verən bir obyektin özəlliyi (bir sıra və ya hash) təyin edildikdə bir üsula sahib ola bilərlər.

while(1); Və ya > qarşısını alır: mail.google.com > AJAX sorğusu mətn məzmununa tam şəkildə sahib olacaq və onu çıxara bilər. Amma <script> daxil etmək heç bir emal olmadan JavaScript-ni kor-koranə qoyur ki, bu da sonsuz dövrə və ya sintaksis səhvinə səbəb olur.

Bu, cross-site istək saxtakarlıq problemini həll etmir.

3884
19 апр. Cavab rjh 19 apr verilir . 2010-04-19 21:11 '10 at 21:11 2010-04-19 21:11

Bu, cavabın JSON qaçırılması vasitəsilə açıqlanmasını maneə törədir.

Teorik olaraq, HTTP cavablarının məzmunu eyni mənşə siyasəti ilə qorunur: bir domendən olan səhifələr başqa bir domendən olan səhifələrdən heç bir məlumat əldə edə bilməzlər (bu, açıqca icazə verilmədikdə).

Təcavüzkar sizin adınızdakı digər domenlərdə, məsələn, <script src=...> və ya <img> istifadə edərək, səhifələrə müraciət edə bilər, lakin nəticə ilə bağlı heç bir məlumat əldə edə bilməz (başlıqlar, məzmun).

Beləliklə, təcavüzkarın səhifəsini ziyarət etsəniz, o, gmail.com ünvanından e-məktubunuzu oxuyacaq.

JSON məzmununu tələb etmək üçün bir skript yazısı istifadə edərkən, JSON bir təcavüzkar nəzarət mühitində Javascript kimi icra edilir. Təcavüzkarın obyektin inşası zamanı istifadə olunan Dizi və ya obyekt qurucusu və ya başqa üsulu əvəz edə bilsəydilər, JSON-da hər şey saldırganın kodundan keçir və açıqlanacaq.

Xatırlayın ki, bu, JSON icra zamanı Javascript kimi baş verir və təhlil zamanı deyil.

Bir neçə qarşı tədbir var:

JSON heç vaxt icra olunmadığından əmin olun.

Bir while(1); yerləşdirmək while(1); JSON məlumatlarından əvvəlki şərhdə Google, JSON məlumatlarının heç vaxt Javascript olaraq işləmədiyini təmin edir.

Yalnız bir hüquqi səhifə, həqiqətən, bütün məzmunu while(1); çıxararaq ala bilər while(1); qalan hissəsini JSON olaraq təhlil edin.

for(;;); məsələn, eyni nəticələrlə Facebookda göründü.

JSON cari Javascript olmadığından əmin olun

Eynilə, > kimi JSON-dan əvvəl etibarsız göstəriciləri əlavə edərək, heç vaxt yerinə yetirilməməsini təmin edir.

border=0

JSON-da hər hansı bir obyektin kənarına qayıt

Bu, JSON OWASP qarşı qorumaq üçün OWASP təklif etdiyi OWASP və bu, daha az müdaxilə edir.

Əvvəlki qarşı tədbirlər kimi, JSON heç vaxt Javascript kimi icra edilməməsini təmin edir.

Cari bir JSON obyekti, heç bir şeyə əlavə edilmirsə, Javascript-də icazə verilmir:

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

Bununla birlikdə, JSON etibarlıdır:

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

Beləliklə, hər zaman bir cavabın üst səviyyəsində bir Obyekt qayıtdığınız üçün təmin edərkən, JSONın Javascript etibarlı olmadığından əmin olun, lakin JSON düzgün qalıb.

@Hvd şərhdə qeyd etdiyimiz kimi, boş bir {} obyekti cari Javascriptdir və obyektin boş olduğunu bildiyiniz kimi, özü də dəyərli məlumat ola bilər.

Yuxarıda göstərilən üsulların müqayisəsi

OWASP metodu daha az müdaxilə edir, çünki müştəri kitabxanasında dəyişiklik tələb etmir və düzgün JSON ötürür. Bununla belə, keçmiş və ya gələcək brauzer səhvləri bunu məğlub edə bilir. @Oriadam tərəfindən qeyd edildiyi kimi, səhvlər işlənərkən və ya (məsələn, window.onerror) işlədildikdə, verilərin ayrıştırma xətası nəticəsində atlana biləcəyi aydın deyil.

Google-un metodu avtomatik serializasiyanı dəstəkləmək üçün müştəri kitabxanasından tələb olunur və brauzer səhvləri baxımından daha təhlükəsiz hesab edilə bilər.

Hər iki üsul server yanlısı dəyişiklikləri tələb edir, belə ki developers təsadüfən həssas JSON göndərə bilməz.

480
02 февр. cavab arnaud576875 02 fevral. 2014-02-02 15:09 '14 at 15:09 2014-02-02 15:09

Bu, digər saytların məlumatlarınızı oğurlamaq üçün xoşagəlməz tövsiyələr edə bilməməsi üçün edilir. Məsələn, dizinin konstruktorunun dəyişdirilməsi , sonra <script> JSON <script> istifadə edərək, bu JSON URL daxil olmaqla, zərərli üçüncü saytın saytı JSON cavabından məlumatları oğurlaya bilər. while(1); yerləşdirmə while(1); əvvəldən yerinə bir skript olacaq.

Eyni şəkildə - XHR istifadə edərək site istək və ayrı bir JSON parser, while(1); prefiksni asanlıqla gözardı edə bilər while(1); .

349
16 мая '09 в 5:08 2009-05-16 05:08 16 May '09 'da saat 05:08 ' da bdonlan cavab verdi 2009-05-16 05:08

Üçüncü tərəflər HTML sənədində JSON cavabını <script> ilə daxil etmək çətin olardı. <script> eyni mənşəli Siyasətlərdən azad olduğunu unutmayın.

101
19 апр. Daniel Vassallo'nun 19 apreldə cavabladığı cavab 2010-04-19 21:04 '10 at 21:04 2010-04-19 21:04

Bu, basit bir <script> üçün bir hədəf olaraq istifadə edilməsinə mane olur. Beləliklə, pis adamlar bu script etiketi öz veb saytına yerləşdirə və kontentin əldə oluna bilməsi üçün aktiv bir sessiyaya etibar edə bilməzlər.

redaktə - şərhə (və digər cavablara) diqqət yetirin. Problem, ObjectArray konstruktorlarının, xüsusilə obyektlərin pozulması ilə bağlıdır. Onlar başqa bir günahsız JSON analizi təhqirçinin kodunu çağırmaq bilər ki, belə bir şəkildə dəyişdirilə bilər.

68
19 апр. Cavab pointy Apr 19 2010-04-19 21:02 '10 at 21:02 2010-04-19 21:02

<script> , web dünyasında təhlükəsizliyin zəruriliyi olan eyni mənşəli siyasətdən azad olduğundan, while(1) JSON cavabına əlavə edildikdə, <script> düzgün istifadə edilməsini maneə törədir.

7
18 авг. cavab verildi kg11 18 aug. 2017-08-18 07:14 '17 saat 07:14 'da 2017-08-18 07:14

və ya sual soruşmaqla bağlı digər suallar