1. 程式人生 > >JSON和JSONP劫持以及解決方法

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可以參考我的博文:

https://blog.csdn.net/yjclsx/article/details/80340901) web程式如果通過這種方式跨域之後,攻擊者完全可以在自己的虛假頁面中發起惡意的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

這裡寫圖片描述