### csrf的原理與危害
CSRF (Cross Site Request Forgery),中文全稱(chēng)跨站點(diǎn)請(qǐng)求偽造。
以兩個(gè)例子說(shuō)明,
案例一:
一個(gè)銀行站點(diǎn)存在一個(gè)csrf漏洞,用戶A轉(zhuǎn)賬給B用戶2000元,執(zhí)行轉(zhuǎn)賬操作后會(huì)對(duì)銀行發(fā)送一次請(qǐng)求:http://www.bank.com/money?user=A&num=2000&transfer=B,然后A用戶就會(huì)把自己的2000元轉(zhuǎn)到B的賬戶下。在發(fā)送這個(gè)請(qǐng)求給銀行服務(wù)器時(shí),服務(wù)器首先會(huì)驗(yàn)證這個(gè)請(qǐng)求是否為一個(gè)合法的session,并且用戶A確認(rèn)登陸才可以驗(yàn)證通過(guò)。
如果此時(shí)有一個(gè)惡意用戶C想把A用戶的錢(qián)轉(zhuǎn)到自己的賬戶下,那么他可以構(gòu)造 http://www.bank.com/money?user=A&num=2000&transfer=C 這個(gè)請(qǐng)求,但是這個(gè)請(qǐng)求必須有A用戶發(fā)出才可以生效,此時(shí)惡意用戶C可以搭建一個(gè)自己的網(wǎng)站,在網(wǎng)站中寫(xiě)入如下代碼 ```<img src="http://www.bank.com/money?user=A&num=2000&transfer=C">```,之后誘導(dǎo)A用戶訪問(wèn)自己的網(wǎng)站,當(dāng)A訪問(wèn)這個(gè)網(wǎng)站時(shí),這個(gè)網(wǎng)站就會(huì)把img標(biāo)簽里的URL發(fā)給銀行服務(wù)器,而此時(shí)除了這個(gè)請(qǐng)求以外,還會(huì)把A用戶的cookie一起發(fā)到服務(wù)器,如果此時(shí)A用戶的瀏覽器與銀行的session沒(méi)有過(guò)期,那么就會(huì)在A用戶毫不知情的情況下執(zhí)行轉(zhuǎn)賬給C的操作。
案例二:
一個(gè)cms系統(tǒng)的管理后臺(tái),可以發(fā)送一個(gè)post請(qǐng)求添加一個(gè)管理員,由于沒(méi)有加token或者驗(yàn)證碼限制,惡意攻擊者可以在自己的服務(wù)器evil.com上建立一個(gè)a.html的文件,a.html文件是一個(gè)添加管理員賬戶的表單,上面寫(xiě)入需要添加的賬戶用戶名及密碼,當(dāng)網(wǎng)站管理員打開(kāi)evil.com/a.html的時(shí)候,并且管理員的session沒(méi)有失效,那么此時(shí)a.html就會(huì)請(qǐng)求受攻擊網(wǎng)站,在管理員毫不知情的情況下添加一個(gè)后臺(tái)賬戶。
通過(guò)以上兩個(gè)案例可以得出結(jié)論,csrf會(huì)根據(jù)業(yè)務(wù)功能場(chǎng)景的不用而利用起來(lái)也不同,這些請(qǐng)求都是跨域發(fā)起的,而且是在受害者的session沒(méi)有失效通過(guò)身份認(rèn)證的情況下發(fā)生的。
使用用戶的登陸憑證,讓用戶自己在不知情的情況下,進(jìn)行修改數(shù)據(jù)的操作。
但是查詢數(shù)據(jù)的地方卻不需要保護(hù),因?yàn)閏srf是借助受害者的cookie來(lái)進(jìn)行攻擊者需要的惡意操作的,攻擊者并不能拿到受害者cookie,對(duì)于服務(wù)器返回的結(jié)果也無(wú)法解析查看,攻擊者唯一可以做的就是讓服務(wù)器執(zhí)行自己的操作命令,或者說(shuō)改變網(wǎng)站數(shù)據(jù),而查詢操作即不會(huì)改變數(shù)據(jù)也不會(huì)把結(jié)果返回給攻擊者,所以并不需要保護(hù)。