[.net mvc] CSRF 防範

小弟我今天打開用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 的值