CSRF介紹
什么是CSRF呢?我們直接看例子。
https://mp.toutiao.com/profile_v3/graphic/preview?do=delete&pgc_id=6829574701128352260
這個URL是頭條刪除pgc_id為6829574701128352260的一篇文章的連接,通過執(zhí)行這個URL用戶就可以刪除這篇文章。
首先攻擊者會構(gòu)造一個頁面:
https://mp.toutiao.com/CSRF.html
其內(nèi)容為:
<img src="https://mp.toutiao.com/profile_v3/graphic/preview?do=delete&pgc_id=6829574701128352260" />
使用了一個<img>標簽,地址指向了刪除頭條文章的鏈接。
攻擊者會誘使頭條主去訪問這個頁面:
執(zhí)行CSRF攻擊
該用戶看到了“頭條君找不到你想要的頁面”的錯誤提示,回頭再看看頭條內(nèi)容管理:
文章被刪除了~~
發(fā)現(xiàn)原來存在的“十大常見web漏洞——跨站點請求偽造(CSRF)”文章已經(jīng)被刪除了!呵呵~~
這是因為頭條主在訪問“https://mp.toutiao.com/CSRF.html”時,執(zhí)行了CSRF.html頁面中的命令,刪除了文章。
CSRF的防御
驗證機制
當頭條主在訪問“https://mp.toutiao.com/CSRF.html”時增加驗證確認機制:
刪除確認
Referer Check
我們在之前的文章中講過HTTP請求頭部的一些可修改的值,就包括Referer值:
HTTP請求頭部
就是確認這個值與Host值是否一致。
操作參數(shù)加密
攻擊者為什么會構(gòu)造這個鏈接:https://mp.toutiao.com/profile_v3/graphic/preview?do=delete&pgc_id=6829574701128352260,因為他知道參數(shù)“do=delete&pgc_id=6829574701128352260”是刪除操作,如果將這個參數(shù)加密,攻擊者就不知道具體操作是什么了,也就無法攻擊了。
沒有網(wǎng)絡(luò)安全,就沒有國家安全!