JSONP原理以及安全問題

JSONP介紹

JSONP全稱是JSON with Padding ,是基於JSON格式的爲解決跨域請求資源而產生的解決方案。他實現的基本原理是利用了 HTML 裏 元素標籤沒有跨域限制

JSONP原理就是動態插入帶有跨域url的script標籤,然後調用回調函數,把我們需要的json數據作爲參數傳入,通過一些邏輯把數據顯示在頁面上。

比如如下代碼所示,通過script標籤完成http://localhost:8080/test01/dom01?callback=jsontest的調用。
在這裏插入圖片描述
後端代碼:
在這裏插入圖片描述

訪問test.html頁面執行script,請求http://localhost:8080/test01/dom01?callback=jsontest,然後將請求的內容作爲參數,執行jsontest函數,jsontest函數將請求的內容彈出來出來。結果如下:
在這裏插入圖片描述
這樣我們就通過script標籤實現了快於請求,繞過了同源策略。

Ajax的jsonp跨域請求原理和這個是一樣的,也是在frame裏面通過創建一個臨時的script標籤來實現跨域請求。感興趣的同學可以自己驗證下,操作時只需要打開瀏覽器調試工具就可以看到。

JSONP劫持

JSON劫持又稱“JSON Hijacking”,2008年國外安全研究人員開始提到由JSONP帶來的風險。這個問題屬於CSRF(Cross-site request forgery跨站請求僞造)攻擊範疇,當某網站通過JSONP的方式跨域(一般爲子域)傳遞用戶認證後的敏感信息時,攻擊者可以構造惡意的JSONP調用頁面,誘導被攻擊者訪問,以達到截取用戶敏感信息的目的。如圖所示(來自參考文章)
在這裏插入圖片描述

一個典型的JSON Hijacking攻擊代碼如下:
在這裏插入圖片描述
黑客誘惑用戶去打開這個html文件,以用戶的身份去訪問http://localhost:8080/test01/dom01?callback=jsontest,然後把用戶的敏感數據通過http://172.20.10.5:8080/test01/dom02?callback=jsontest發送給黑客的服務器。
在這裏插入圖片描述
http://172.20.10.5:8080/test01/dom02的代碼如下所示:其實可以用一個map去接收數據,這樣可以在不知道json的數據結構的情況下接收數據。
在這裏插入圖片描述

JSONP劫持挖掘與防禦

JSONP漏洞挖掘,首先需要儘可能的找到所有的接口,尤其是返回數據格式是JSONP的接口,然後在數據包中檢索關鍵詞callback、json、jsonp、email等,觀察返回值是否變化。

JSONP劫持的防禦

  • 限制來源refer
  • 按照JSON格式標準輸出(設置Content-Type : application/json; charset=utf-8),預防http://127.0.0.1/getUsers.php?callback=形式的xss
  • 過濾callback函數名以及JSON數據輸出,預防xss
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章