CSRF攻擊的過(guò)程
1.用戶C瀏覽并登陸信任的站點(diǎn)A
2.A驗(yàn)證通過(guò),在用戶C處產(chǎn)生A的Cookie
3.用戶C在沒(méi)有登陸的情況下訪問(wèn)攻擊站點(diǎn)B
4.B要求訪問(wèn)第三方的站點(diǎn)A主到,發(fā)出一個(gè)請(qǐng)求
5.根據(jù)B在4的請(qǐng)求浙滤,瀏覽器攜帶2產(chǎn)生的cookie訪問(wèn)站點(diǎn)A
6.A不知道5中的請(qǐng)求是用戶C發(fā)出的還是B發(fā)出的阴挣,由于瀏覽器會(huì)自動(dòng)帶上用戶C的Cookie,所以A會(huì)個(gè)根據(jù)C的權(quán)限處理5的請(qǐng)求纺腊,這樣B就達(dá)到了模擬用戶登錄的目的
防止CSRF的攻擊
1.在客戶端向后端請(qǐng)求界面數(shù)據(jù)的時(shí)候畔咧,后端會(huì)往響應(yīng)中的cookie中設(shè)置csrf_token的值
2.在Form表單中添加一個(gè)隱藏字段,值也是csrf_token
3.在用戶提交的時(shí)候揖膜,會(huì)帶上這兩個(gè)值向后臺(tái)發(fā)起請(qǐng)求
4.后端接收到請(qǐng)求以后誓沸,會(huì)做三件事:
- 從cookie中取出csrf_token
- 從表單數(shù)據(jù)中取出隱藏的csrf_token的值
- 將這連個(gè)值進(jìn)行比對(duì)
5.如果比較后兩個(gè)值一樣,那么代表是正常的請(qǐng)求壹粟,如果沒(méi)有取到或者比較不一致拜隧,代表不是正常的請(qǐng)求,不執(zhí)行下一步操作