前言

前幾天,有個朋友問我關(guān)于AntiForgeryToken問題,由于對這一塊的理解也并不深入,所以就去研究了一番,梳理了一下。

在梳理之前,還需要簡單了解一下背景知識。

AntiForgeryToken 可以說是處理/預(yù)防CSRF的一種處理方案。

那么什么是CSRF呢?

CSRF(Cross-site request forgery)是跨站請求偽造,也被稱為One Click Attack或者Session Riding,通常縮寫為CSRF或者XSRF,是一種對網(wǎng)站的惡意利用。

簡單理解的話就是:有人盜用了你的身份,并且用你的名義發(fā)送惡意請求。

最近幾年,CSRF處于不溫不火的地位,但是還是要對這個小心防范!

更加詳細的內(nèi)容可以參考維基百科:Cross-site request forgery

下面從使用的角度來分析一下CSRF在 ASP.NET Core中的處理,個人認為主要有下面兩大塊

  • 視圖層面

  • 控制器層面

視圖層面

用法

@Html.AntiForgeryToken()

在視圖層面的用法相對比較簡單,用的還是HtmlHelper的那一套東西。在Form表單中加上這一句就可以了。

原理淺析

當在表單中添加了上面的代碼后,頁面會生成一個隱藏域,隱藏域的值是一個生成的token(防偽標識),類似下面的例子

<input name="__RequestVerificationToken" type="hidden" value="CfDJ8FBn4LzSYglJpE6Q0fWvZ8WDMTgwK49lDU1