為什麼谷歌的JSON響應以while(1);開頭?
問題(QUESTION):
我有個問題一直很好奇就是:為什麼谷歌的JSON響應以while(1);開頭?舉個例子,當把谷歌日曆開啟和關掉時,會返回這樣的JSON物件:
while(1);[['u',[['smsSentFlag','false'],['hideInvitations','false'],['remindOnRespondedEventsOnly','true'],'hideInvitations_remindOnRespondedEventsOnly','false_true'],['Calendar ID stripped for privacy','false'],['smsVerifiedFlag','true']]]]
覺得這是谷歌不推薦使用eval()函式。我們需要做的是取代while,然後設定。我認為避免使用eval()函式是為了用eval()函式來確認JSON格式的字串是否正確,從而確保程式設計師寫出安全的JSON解析程式碼。我在其他一些地方也見過這個用法,但更多的是在谷歌的產品中,像谷歌的郵件、日曆、通訊錄等。
說來也奇怪,谷歌文件以&&&START&&&開頭,但谷歌通訊錄卻以while(1);&&& START&&&開頭。有人知道這是為什麼嗎?
回答1:
這可以防止JSON劫持。舉個不是很恰當的例子:谷歌有一個URL:mail.google.com/json?Action=inbox ,在JSON格式下,它可以讀取你的收件箱內前50條訊息。由於同源策略,其他域內的壞網站卻不能發出AJAX請求,以獲取這些資料,但是他們可以通過重寫全域性陣列建構函式或者存取函式,使cookies和URL間可以有一種方法,無論何時設定一個物件(陣列或雜湊)的屬性,都允許他們讀取JSON內容。
while(1); 或者&&&BLAH&&& 可以防止mail.google.com上的一條AJAX請求,擁有對於文字內容的全部訪問許可權,並且能夠將其撤銷。但是同時,一 個 SCRIPT 標籤的插入會在無需任何處理的情況下,盲目地執行JavaScript,最終可能導致死迴圈或語法錯誤。同時這也並不能解 決偽造的跨站請求問題。
回答2:
這是為了確保讓其他網站不能偷取你的資訊。例如,先 通過替換陣列構造器,再通過一個 SCRIPT 標籤包含這個JSON URL,惡意的第三方網站就可以從JSON響應盜取資料。把while(1);放在開頭就可以解決這樣的問題。在另一方面,來自同一個網站使用XHR和獨 立的JSON解析器的請求,可以直接忽略while(1);。
回答3:
這將會給使用 SCRIPT 標籤的第三方網站在HTML文件中插入JSON響應變得困難。值得注意的是, SCRIPT 標籤
是不需要被Sa授權的哦。
回答4:
這可以防止被當作一個簡單 SCRIPT 標籤目標。這樣的話,壞傢伙就不能輕而易舉地把指令碼標籤放到他們自己的網站,利用活動會話而有機會偷取你的資料。
相關文章
- ajax為什麼需要json格式響應資料?JSON
- 為什麼瀏覽器的使用者代理字串以 Mozilla 開頭瀏覽器字串
- 為什麼需要應急響應?網路安全應急響應需要做什麼?
- 【網路安全】組織為什麼需要應急響應?應急響應需要做什麼?
- python中while 1表示什麼PythonWhile
- 什麼是應急響應?網路安全應急響應的物件是什麼?物件
- 為什麼要學習響應式設計
- 谷歌、亞馬遜.....為什麼巨頭們燒錢也圓不了遊戲夢谷歌亞馬遜遊戲
- 前端響應式佈局為什麼是個坑?前端
- http請求頭與響應頭的應用HTTP
- yaml 檔案裡的中文,以 json 格式請求抓包為什麼是 unicodeYAMLJSONUnicode
- SpringMVC處理請求頭、響應頭、編碼行為SpringMVC
- 以就業為目標,Python到底應該學什麼?就業Python
- 什麼是應急響應?網路安全應急響應體系的要素!
- 為什麼以a為底,n的對數(以b為底)為指數的冪等於以n為底,a的對數(以b 為底)為指數的冪?
- ajax接受json響應JSON
- 為什麼你的程式碼如此難以理解
- 蘋果的設計為什麼難以複製蘋果
- 為什麼我們家裡的IP都是192.168開頭的?
- IT人為什麼難以拿到高薪(轉)高薪
- python變數命名為什麼數字不能開頭?Python變數
- javascript為什麼語句開頭就有一個分號JavaScript
- 為什麼谷歌實習生月薪是5678美金谷歌
- 谷歌為什麼必須迴歸中國谷歌
- HTTP請求頭與響應頭HTTP
- 為什麼你應該為開源做設計
- 李開復:谷歌喜歡招收什麼樣的應屆畢業生谷歌
- 開發Web應用為什麼要用TypeScript?WebTypeScript
- 返回的 json 串 sessionId 為什麼是 nullJSONSessionNull
- 為什麼要使用JSON傳輸資訊JSON
- 谷歌與造AR遊戲頭盔 響應口袋妖怪GO遊戲火熱!谷歌遊戲Go
- 智慧市場紅利當頭,科技應以人為本
- Google 為什麼以 Flutter 作為原生突破口GoFlutter
- 為什麼響應式程式設計並非一時之勢?程式設計
- 為什麼谷歌不起訴華為的鴻蒙系統?谷歌鴻蒙
- [php]http響應頭解析PHPHTTP
- Linux的中斷響應流程是什麼Linux
- JSON是什麼,有什麼用,怎麼寫jsonJSON