跨站請求偽造(csrf)是一種劫持受信任用戶向服務(wù)器發(fā)送非預(yù)期請求的攻擊方式。例如,這些非預(yù)期請求可能在url后加入一些惡意的參數(shù),從而達到攻擊者的目的。
理解
其他人通過csrf攻擊盜用你的網(wǎng)站用戶身份。
你這個網(wǎng)站用戶所擁有的權(quán)限那他就都可以使用,比如用你的身份發(fā)消息、購買物品、轉(zhuǎn)賬等等。
原理
A:用戶的信任網(wǎng)站 B:危險網(wǎng)站
.成功登錄A網(wǎng)站 這里瀏覽器會產(chǎn)生cookie
.打開B網(wǎng)站
.B網(wǎng)站事先摸清了A網(wǎng)站的請求套路,比如轉(zhuǎn)賬的請求是:/zhuangzhang
.此時打開B網(wǎng)站會有請求到A網(wǎng)站,并且攜帶了A網(wǎng)站的cookie
.A的服務(wù)器會認為這是一個正常的處理,這樣B就達到了模擬用戶操作的目的
常見攻擊類型
-
GET類型的csrf
某網(wǎng)站可以上傳圖片,然后小明上傳了圖片如下
<img src=http://jirengu.com/csrf?xx=11 />當(dāng)用戶訪問到有此圖片的頁面時就完成了一次csrf攻擊
-
POST類型的csrf
用戶在登錄他所信任的的網(wǎng)站之后又訪問了危險網(wǎng)站
危險網(wǎng)站內(nèi)有這樣一段代碼
<form action=http://jirengu.com/csrf.php method=POST> <input type="text" name="xx" value="11" /> </form> <script> document.forms[0].submit(); </script>訪問此頁面后 表單就會提交 此時就完成了一次post的csrf攻擊
防御
-
驗證 HTTP Referer 字段
http協(xié)議中,http頭有一個字段叫 referer ,他記錄了該請求的來源。
請求驗證的時候,判斷請求來源是否合法,不合法就拒絕并送他一句MMP..
但是referer是可以篡改的,就斷有些瀏覽器無法篡改對于某些注重隱私的組織來說這種方法也不實用。
-
添加token
csrf的原理就是偽造用戶的請求,那可以制造一種不能偽造或者很難偽造的請求。
我們可以再http請求中加一個隨機產(chǎn)生的token,在服務(wù)器驗證token
如果token不合法那就送他一句MMP吧
但是這種方法也有很大缺點,比如每個請求都需要攜帶token增加了開發(fā)成本
而且,通過referer也可以得到token值
完
csrf的危害很大,但?? 又難于防范,并沒有很完美的解決方案,只有重視才能降低傷害。