JSON和JSONP劫持以及解決方法
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
json劫持
json劫持攻擊又為”JSON Hijacking”,攻擊過程有點類似於csrf,只不過csrf只管傳送http請求,但是json-hijack的目的是獲取敏感資料。 一些web應用會把一些敏感資料以json的形式返回到前端,如果僅僅通過cookie來判斷請求是否合法,那麼就可以利用類似csrf的手段,向目標伺服器傳送請求,以獲得敏感資料。 比如下面的連結在已登入的情況下會返回json格式的使用者資訊:
http://www.test.com/userinfo
- 1
攻擊者可以在自己的虛假頁面中,加入如下標籤:
<script src="http://www.test.com/userinfo"></script>
- 1
如果當前瀏覽器已經登入了www.test.com,並且cookie未過期,然後訪問了攻擊者的虛假頁面,那麼該頁面就可以拿到json形式的使用者敏感資訊,因為script標籤會自動解析json資料,生成對應的js物件。然後再通過
Object.prototype.__defineSetter__
- 1
這個函式來觸發自己的惡意程式碼。 但是這個函式在當前的新版本chrome和firefox中都已經失效了。
jsonp劫持
jsonp是一個非官方的協議,利用script元素的開放策略,網頁可以得到從其他來源動態產生的json資料,因此可以用來實現跨域。(關於JSONP可以參考我的博文:
<script>
function useUserInfo(v){
alert(v.username);
}
</script>
<script src="http://www.test.com/userinfo?callback=useUserInfo"></script>
- 1
- 2
- 3
- 4
- 5
- 6
如果伺服器端的userinfo介面支援jsonp,那就會使虛假頁面成功執行useUserInfo函式,從而導致安全問題。
解決方法
其實json劫持和jsonp劫持屬於CSRF( Cross-site request forgery 跨站請求偽造)的攻擊範疇,所以解決的方法和解決csrf的方法一樣。 1、驗證 HTTP Referer 頭資訊; 2、在請求中新增 csrfToken 並在後端進行驗證; 關於CSRF攻擊可以參考我的博文:https://blog.csdn.net/yjclsx/article/details/80351860