看板 Knuckles_note
作者 標題 [JS] JSON Hijacking
時間 2013年02月17日 Sun. PM 12:10:17
http://haacked.com/archive/2009/06/25/json-hijacking.aspx
某個本來是要給ajax回應的json檔
若被其他網站利用<script src=...載入的話
json檔中需要使用者登入才能取得的資料,就有可能被其他網站抓走
google 回傳的JSON檔都會在前面放一個 while(1); 來防止 json hijacking
要避免這個問題,最簡單的作法就是『不要透過 HTTP GET 送出 JSON 資料』
雖然 jQuery 沒有內建 $.postJSON 方法,但卻非常容易實做,且在官網的 jQuery.post 文件有提供一個簡單的範例如下:
$.postJSON = function(url, data, callback) {
$.post(url, data, callback, "json");
};
防治方式
1. 僅允許使用 HTTP POST method 傳輸資料
因為 <script> 使用 HTTP GET method 取得資料,改用 HTTP POST method 可減少 hijacking 機會。然而《在使用者未察覺的情形下自動送出表單》一文中證明,我們還是有辦法發動 HTTP POST method 。
2. 檢查referer
伺服端須檢查使用者瀏覽網頁之referer是否來自相同網域。
3. 加上注釋符號或是改用 XML 格式
以<script>載入資料時,便立即執行,不能選擇執行時機,也不能僅執行片段內容。因此外部文件必須是一個純 JavaScript 文件。若在 JSON 資料前後加上注釋符號,如 /*[{"title": "xyz"}]*/,便可令 JavaScript 視之為一般注釋而不加以執行,如此便不會喚起 Hijacking 程式碼。當然,改用 XML 格式也有同樣效果。
--
※ 作者: Knuckles 時間: 2013-02-17 12:10:17
※ 編輯: Knuckles 時間: 2013-02-17 12:11:02
※ 看板: KnucklesNote 文章推薦值: 1 目前人氣: 0 累積人氣: 604
回列表(←)
分享