前言
前幾天,有個朋友問我關(guān)于AntiForgeryToken問題,由于對這一塊的理解也并不深入,所以就去研究了一番,梳理了一下。
在梳理之前,還需要簡單了解一下背景知識。
AntiForgeryToken 可以說是處理/預(yù)防CSRF的一種處理方案。
那么什么是CSRF呢?
CSRF(Cross-site request forgery)是跨站請求偽造,也被稱為One Click Attack或者Session Riding,通常縮寫為CSRF或者XSRF,是一種對網(wǎng)站的惡意利用。
簡單理解的話就是:有人盜用了你的身份,并且用你的名義發(fā)送惡意請求。
最近幾年,CSRF處于不溫不火的地位,但是還是要對這個小心防范!
更加詳細(xì)的內(nèi)容可以參考維基百科:Cross-site request forgery
下面從使用的角度來分析一下CSRF在 ASP.NET Core中的處理,個人認(rèn)為主要有下面兩大塊
視圖層面
控制器層面
視圖層面
用法
@Html.AntiForgeryToken()
在視圖層面的用法相對比較簡單,用的還是HtmlHelper的那一套東西。在Form表單中加上這一句就可以了。
原理淺析
當(dāng)在表單中添加了上面的代碼后,頁面會生成一個隱藏域,隱藏域的值是一個生成的token(防偽標(biāo)識),類似下面的例子
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8FBn4LzSYglJpE6Q0fWvZ8WDMTgwK49lDU1