2014-11-16 66 views
2

我發現以關閉括號開頭的JSON文件用於Google的一項服務中。以下是一個示例,您會看到它在主數據部分之前具有右括號和單引號。我檢查了獲取這個JSON數據的JavaScript代碼。他們正在做的是在解析數據之前手動刪除第一個連續的括號。以右括號開頭的JSON數據

)]}' 
["value1", "value2"] 

這裏是我的問題。

  1. 這個JSON格式是否有效?

  2. 任何人都知道他們爲什麼這樣做?

回答

5

這是針對所謂的JSON劫持漏洞的保護。在解釋前,客戶會剝去領先的垃圾。

在JSON劫持漏洞攻擊中,用戶在一個選項卡中登錄到應用程序,例如,瀏覽器將其身份驗證令牌保存在cookie中。黑客然後安排用戶在另一個選項卡中打開惡意應用程序。該選項卡中的HTML包含一個script標記,其src設置爲第一個應用的某個JSON API的URL。由於它是一個腳本標記,因此沒有同源檢查。由於瀏覽器在請求中包含有效憑證,因此第一個應用會繼續並返回JSON,可能包含機密信息。由於JSON是有效的JavaScript,因此瀏覽器執行它,這本身不會導致任何事情發生,但黑客可以通過檢查腳本標記的內容來檢索JSON。

通過將垃圾放在JSON之前,它不能被解析爲有效的JS。因此,瀏覽器出錯並且不會將內容加載到惡意應用程序的腳本標記中,因此無法檢查它。不同供應商使用的垃圾有各種「風味」; Google是一個。

現在有幾種內置的對抗JSON劫持的方法,它不再是一個威脅,除非在沒有正確設置標題的舊瀏覽器中。

+0

是的,這就是我想知道的。感謝您的詳細解釋 – Ryo

0

嘿,這JSON文件是完全無效的,因爲JSON文件是基於它是基於關鍵值對

+0

你知道他們爲什麼這樣做嗎? 我個人認爲它有點混淆數據。 – Ryo

1

由於@torazaburo在評論回答地圖,這是出於安全原因。

這是針對所謂的js劫持漏洞的保護。客戶在解釋它之前去掉了領先垃圾

-3

是的,你的json格式是有效的。如果你有任何困惑,然後檢查你在這個鏈接的JSON格式 http://jsonlint.com/

+0

看起來像是說無效。你是否忽略了第一次封鎖制動器? – Ryo