CSRF(跨站請(qǐng)求偽造)
簡(jiǎn)單場(chǎng)景
基本流程:假設(shè)A網(wǎng)站是合法的惯雳,B網(wǎng)站是惡意網(wǎng)站
小明是一個(gè)A網(wǎng)站的注冊(cè)用戶队橙,一般登陸后拦坠,網(wǎng)站都會(huì)把用戶憑證放在cookie中连躏,在一定時(shí)期內(nèi)小明再訪問(wèn)A網(wǎng)站就不需要重新登陸了。
假設(shè)在這個(gè)有效期內(nèi)贞滨,小明訪問(wèn)了B網(wǎng)站的一個(gè)惡意鏈接(可以是點(diǎn)擊也可是打開(kāi)網(wǎng)頁(yè)等)反粥,B網(wǎng)站精心設(shè)置了一系列操作,利用小明A網(wǎng)站的登陸信息訪問(wèn)了A網(wǎng)站的一系列接口疲迂。比如刪除接口等等。
案例舉到這里可以看出莫湘,要實(shí)現(xiàn)CSRF攻擊主要滿足:
1.A網(wǎng)站對(duì)應(yīng)的接口要有漏洞
2.小明已經(jīng)登陸了A網(wǎng)站尤蒿,具有憑證
如何防御?
1.設(shè)置cookie的SameSite屬性
由于CSRF相當(dāng)于利用登陸用戶的cookie(不能修改)幅垮,而SameSite屬性只有同一個(gè)網(wǎng)站才可以使用
缺點(diǎn):這個(gè)屬性目前兼容性比較差
2.服務(wù)端驗(yàn)證客戶端請(qǐng)求中的refer字段
r缺點(diǎn):refer可以比較容易的進(jìn)行抓包修改
3.在網(wǎng)站前端(A網(wǎng)站)設(shè)置csrf_token
對(duì)應(yīng)post請(qǐng)求可以再表單中添加隱藏的input標(biāo)簽腰池,設(shè)置值為csrf_token
對(duì)于get請(qǐng)求可以設(shè)置在meta標(biāo)簽中等
然后每次刷新頁(yè)面csrf_token需要改變,可以在cookie中也設(shè)置csrf_token忙芒,然后服務(wù)端判斷兩個(gè)cookie是否相等決定響應(yīng)