javascript
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
總結
以上是生活随笔為你收集整理的JSONP原理以及安全问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: empire-web可视化
- 下一篇: 密码学基础知识(一)信息安全与密码学