小弟我今天打開用Acunetix掃出來的報告
看見一個CSRF攻擊的警示
首先何謂CSRF? 聽到是聽過很多次,但都沒有實際的去理解一次
CSRF攻擊流程 可參考 https://blog.techbridge.cc/2017/02/25/csrf-introduction/
我覺得這篇寫的很淺顯易懂、完整
(簡單說就是透過各種方式,做跨站的動作,如直接對應Post、Get 刪除資料、文章...等)
(只能透過token的比對、同網域Cookie比對,才能防範)
該篇最後的結論也等同於,我剛學MVC根本不知道為什麼要加 @Html.AntiForgeryToken
跟 [ValidateAntiForgeryToken]
那神奇的Microsoft 到底是怎麼完成這件事情的? AntiForgeryToken 是如何運作的?
如果在form內加上 @Html.AntiForgeryToken,他會做兩件事情
第一件事情就是,token會直接以hidden型態的input內嵌於form內 (name=__RequestVerificationToken)
第二個token會以__RequestVerificationToken的Key值存在Cookie,利用開發者工具就看到。
然後在Controller上加上ActionFilter [ValidateAntiForgeryToken]
所以他會在進入Action前,先進入OnAuthentication 這個方法內做比對(繼承Controller)
這就是MVC已經做好好的CSRF防範的方法,只能說今天終於明白 @Html.AntiForgeryToken 跟 [ValidateAntiForgeryToken] 的運作了
------------------
如果又有使用 PartialView 並且有AJAX的存取時
可以參考 https://blog.gss.com.tw/index.php/2017/06/22/csrf/ 這篇下方
在傳入資料的時候用Jquery 抓,input hidden 的值