攻擊原理
CSRF攻擊是源于Web的隱式身份驗(yàn)證機(jī)制!Web的身份驗(yàn)證機(jī)制雖然可以保證一個(gè)請(qǐng)求是來(lái)自于某個(gè)用戶的瀏覽器,但卻無(wú)法保證該請(qǐng)求是用戶批準(zhǔn)發(fā)送的。CSRF攻擊的一般是由服務(wù)端解決。
CSRF一般的攻擊過(guò)程是,攻擊者向目標(biāo)網(wǎng)站注入一個(gè)惡意的CSRF攻擊URL地址(跨站url),當(dāng)(登錄)用戶訪問(wèn)某特定網(wǎng)頁(yè)時(shí),如果用戶點(diǎn)擊了該URL,那么攻擊就觸發(fā)了,我們可以在該惡意的url對(duì)應(yīng)的網(wǎng)頁(yè)中,利用 <img src="" /> 來(lái)向目標(biāo)網(wǎng)站發(fā)生一個(gè)get請(qǐng)求,該請(qǐng)求會(huì)攜帶cookie信息,所以也就借用了用戶的身份,也就是偽造了一個(gè)請(qǐng)求,該請(qǐng)求可以是目標(biāo)網(wǎng)站中的用戶有權(quán)限訪問(wèn)的任意請(qǐng)求。也可以使用javascript構(gòu)造一個(gè)提交表單的post請(qǐng)求。比如構(gòu)造一個(gè)轉(zhuǎn)賬的post請(qǐng)求。
所以CSRF的攻擊分為了兩步,首先要注入惡意URL地址,然后在該地址中寫入攻擊代碼,利用<img> 等標(biāo)簽或者使用Javascript腳本。
下面是CSRF的常見(jiàn)特性:
1.依靠用戶標(biāo)識(shí)危害網(wǎng)站
2.利用網(wǎng)站對(duì)用戶標(biāo)識(shí)的信任
3.欺騙用戶的瀏覽器發(fā)送HTTP請(qǐng)求給目標(biāo)站點(diǎn)
4.另外可以通過(guò)IMG標(biāo)簽會(huì)觸發(fā)一個(gè)GET請(qǐng)求,可以利用它來(lái)實(shí)現(xiàn)CSRF攻擊

CSRF防御
1.通過(guò) referer、token 或者 驗(yàn)證碼 來(lái)檢測(cè)用戶提交。
2.盡量不要在頁(yè)面的鏈接中暴露用戶隱私信息。
3.對(duì)于用戶修改刪除等操作最好都使用post 操作 。
4.避免全站通用的cookie,嚴(yán)格設(shè)置cookie的域。