讀取this問題,即爲什麼谷歌/ Facebook的等添加不可解析多餘的內容等之後:JSON unparseable cruft:爲什麼這麼認真?
while(1);
for(;;);
&&&START&&& ... &&&END&&&
- 1和3相結合
其JSON迴應,我已經理解了動機。但我仍然不清楚爲什麼這樣相對複雜的機制被使用,當類似的效果可以用的東西像
- 在開始添加額外的
)
渲染無效的整條生產線有語法錯誤 實現
- 在評論
現在包裝的JSON,似乎這增加了一個無限循環和(怪異)語法錯誤的保護,就會得到解決老年人和寬容的JavaScript解析器,但我似乎無法找到指示任何引用這是事實。還有另一個SO question繼續解決while(1);
解決方法(聲明1可以被破壞)並拒絕{}&&
形式的另一個解決方法,但不能解釋爲什麼或引用任何來源。
其他參考資料:
- http://code.google.com/p/fbug/issues/detail?id=369
- http://prototypejs.org/learn/json,這表明一個包裹JSON在
/*-secure-\n...*/
只是我還是這樣覺得安全通過默默無聞,甚至不會成爲任何合理編寫的XSS漏洞的問題? JSON.parse()實際上是否調用eval()? –
一個相關的問題是爲什麼他們不只是返回JSON對象而不是數組。返回一個對象會產生完全有效的JSON,這是無效的Javascript,以更清晰的方式阻止JSON劫持。可能的答案是這些服務試圖以儘可能緊湊的格式返回以節省帶寬。大多數Web服務的運行規模並不那麼大,可以避免這種優化。 –