跨站請求偽造(csrf)是一種劫持受信任用戶向服務(wù)器發(fā)送非預(yù)期請求的攻擊方式烙心。例如粱甫,這些非預(yù)期請求可能在url后加入一些惡意的參數(shù)搂漠,從而達(dá)到攻擊者的目的。
理解
其他人通過csrf攻擊盜用你的網(wǎng)站用戶身份亮隙。
你這個(gè)網(wǎng)站用戶所擁有的權(quán)限那他就都可以使用途凫,比如用你的身份發(fā)消息、購買物品溢吻、轉(zhuǎn)賬等等维费。
原理
A:用戶的信任網(wǎng)站 B:危險(xiǎn)網(wǎng)站
.成功登錄A網(wǎng)站 這里瀏覽器會(huì)產(chǎn)生cookie
.打開B網(wǎng)站
.B網(wǎng)站事先摸清了A網(wǎng)站的請求套路,比如轉(zhuǎn)賬的請求是:/zhuangzhang
.此時(shí)打開B網(wǎng)站會(huì)有請求到A網(wǎng)站,并且攜帶了A網(wǎng)站的cookie
.A的服務(wù)器會(huì)認(rèn)為這是一個(gè)正常的處理,這樣B就達(dá)到了模擬用戶操作的目的
常見攻擊類型
-
GET類型的csrf
某網(wǎng)站可以上傳圖片犀盟,然后小明上傳了圖片如下
<img src=http://jirengu.com/csrf?xx=11 />
當(dāng)用戶訪問到有此圖片的頁面時(shí)就完成了一次csrf攻擊
-
POST類型的csrf
用戶在登錄他所信任的的網(wǎng)站之后又訪問了危險(xiǎn)網(wǎng)站
危險(xiǎn)網(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>
訪問此頁面后 表單就會(huì)提交 此時(shí)就完成了一次post的csrf攻擊
防御
-
驗(yàn)證 HTTP Referer 字段
http協(xié)議中噪漾,http頭有一個(gè)字段叫 referer ,他記錄了該請求的來源且蓬。
請求驗(yàn)證的時(shí)候欣硼,判斷請求來源是否合法,不合法就拒絕并送他一句MMP..
但是referer是可以篡改的恶阴,就斷有些瀏覽器無法篡改對于某些注重隱私的組織來說這種方法也不實(shí)用诈胜。
-
添加token
csrf的原理就是偽造用戶的請求,那可以制造一種不能偽造或者很難偽造的請求冯事。
我們可以再http請求中加一個(gè)隨機(jī)產(chǎn)生的token焦匈,在服務(wù)器驗(yàn)證token
如果token不合法那就送他一句MMP吧
但是這種方法也有很大缺點(diǎn),比如每個(gè)請求都需要攜帶token增加了開發(fā)成本
而且昵仅,通過referer也可以得到token值
完
csrf的危害很大缓熟,但?? 又難于防范,并沒有很完美的解決方案摔笤,只有重視才能降低傷害够滑。