Google neden (özel) JSON yanıtlarına while(1);
ekliyor?
Örneğin, Google Takvim'de bir takvimi açıp kapatırken verilen bir yanıt:
while(1);[['u',[['smsSentFlag','false'],['hideInvitations','false'],
['remindOnRespondedEventsOnly','true'],
['hideInvitations_remindOnRespondedEventsOnly','false_true'],
['Calendar ID stripped for privacy','false'],['smsVerifiedFlag','true']]]]
Bunun, insanların üzerinde eval()
yapmasını önlemek için olduğunu varsayıyorum, ancak gerçekten yapmanız gereken tek şey while
ifadesini değiştirmek ve sonra hazır olursunuz. Eval engellemesinin insanların güvenli JSON ayrıştırma kodu yazmasını sağlamak için olduğunu varsayıyorum.
Bunun birkaç yerde daha kullanıldığını gördüm, ancak daha çok Google'da (Mail, Takvim, Kişiler, vb.) Garip bir şekilde, Google Docs bunun yerine &&&START&&&
ile başlıyor ve Google Kişiler while(1); &&&START&&&
ile başlıyor gibi görünüyor.
Burada neler oluyor?
Bu, başka bir sitenin verilerinizi çalmaya çalışmak için kötü hileler yapamayacağından emin olmak içindir. Örneğin, dizi kurucusunu değiştirerek, ardından bu JSON URL'sini bir <script>
etiketi aracılığıyla ekleyerek, kötü niyetli bir üçüncü taraf sitesi JSON yanıtındaki verileri çalabilir. Başına bir while(1);
koyduğunuzda, kod bunun yerine askıda kalacaktır.
Öte yandan, XHR ve ayrı bir JSON ayrıştırıcı kullanan aynı siteye ait bir istek, while(1);
önekini kolayca göz ardı edebilir.
Bu, bir üçüncü tarafın JSON yanıtını <script>
etiketiyle bir HTML belgesine eklemesini zorlaştırmak olacaktır. lt;script>` etiketinin Same Origin Policy'den muaf olduğunu unutmayın.
Not: 2019 itibariyle, bu soruda tartışılan önleyici tedbirlere yol açan eski güvenlik açıklarının çoğu artık modern tarayıcılarda sorun teşkil etmemektedir. Aşağıdaki cevabı tarihsel bir merak olarak bırakacağım, ancak gerçekten tüm konu bu sorunun sorulduğu 2010'dan (!!) bu yana kökten değişti.
Basit bir <script>
etiketinin hedefi olarak kullanılmasını engeller. (Aslında bunu engellemez ama tatsız hale getirir.) Bu şekilde kötü niyetli kişiler bu script etiketini kendi sitelerine koyamaz ve içeriğinizi almak için aktif bir oturuma güvenemezler.
edit — yoruma (ve diğer cevaplara) dikkat edin. Sorun, özellikle Object
ve Array
yapıcıları olmak üzere, yıkılmış yerleşik olanaklarla ilgilidir. Bunlar, normalde zararsız olan JSON ayrıştırıldığında saldırgan kodunu tetikleyebilecek şekilde değiştirilebilir.