CSRF介紹
什么是CSRF呢?我們直接看例子。
https://mp.toutiao.com/profile_v3/graphic/preview?do=delete&pgc_id=6829574701128352260
這個URL是頭條刪除pgc_id為6829574701128352260的一篇文章的連接,通過執行這個URL用戶就可以刪除這篇文章。
首先攻擊者會構造一個頁面:
https://mp.toutiao.com/CSRF.html
其內容為:
<img src="https://mp.toutiao.com/profile_v3/graphic/preview?do=delete&pgc_id=6829574701128352260" />
使用了一個<img>標簽,地址指向了刪除頭條文章的鏈接。
攻擊者會誘使頭條主去訪問這個頁面:

執行CSRF攻擊
該用戶看到了“頭條君找不到你想要的頁面”的錯誤提示,回頭再看看頭條內容管理:

文章被刪除了~~
發現原來存在的“十大常見web漏洞——跨站點請求偽造(CSRF)”文章已經被刪除了!呵呵~~
這是因為頭條主在訪問“https://mp.toutiao.com/CSRF.html”時,執行了CSRF.html頁面中的命令,刪除了文章。
CSRF的防御
驗證機制
當頭條主在訪問“https://mp.toutiao.com/CSRF.html”時增加驗證確認機制:

刪除確認
Referer Check
我們在之前的文章中講過HTTP請求頭部的一些可修改的值,就包括Referer值:

HTTP請求頭部
就是確認這個值與Host值是否一致。
操作參數加密
攻擊者為什么會構造這個鏈接:https://mp.toutiao.com/profile_v3/graphic/preview?do=delete&pgc_id=6829574701128352260,因為他知道參數“do=delete&pgc_id=6829574701128352260”是刪除操作,如果將這個參數加密,攻擊者就不知道具體操作是什么了,也就無法攻擊了。
沒有網絡安全,就沒有國家安全!