ASP.NET Core 2.0中Razor頁面禁用防偽令牌驗證
在這篇短文中,我將向您介紹如何ASP.NET Core Razor頁面中禁用防偽令牌驗證。
Razor頁面是ASP.NET Core 2.0中增加的一個頁面控制器框架,用于構(gòu)建動態(tài)的、數(shù)據(jù)驅(qū)動的網(wǎng)站;支持跨平臺開發(fā),可以部署到Windows,Unix和Mac操作系統(tǒng)。
跨站點(diǎn)請求偽造(也稱為XSRF或CSRF)是對Web托管應(yīng)用程序的攻擊,因為惡意網(wǎng)站可能會影響客戶端瀏覽器和瀏覽器信任網(wǎng)站之間的交互。這種攻擊是完全有可能的,因為Web瀏覽器會自動在每一個請求中發(fā)送某些身份驗證令牌到請求網(wǎng)站。這種攻擊形式也被稱為 一鍵式攻擊 或 會話控制,因為攻擊利用了用戶以前認(rèn)證的會話。關(guān)于這個話題可以看我的另一篇博客:ASP.NET Core 防止跨站請求偽造(XSRF/CSRF)攻擊。
Razor頁面被設(shè)計為默認(rèn)啟動防跨站請求偽造攻擊的,防偽令牌生成和驗證被自動包含在Razor頁面中。但是,在某些情況下,您可能想禁用它。
全局禁用
要在Razor頁面中全局禁用防偽令牌驗證,可以在Startup類的ConfigureServices方法中禁用:
public void ConfigureServices(IServiceCollection services) { services.AddMvc().AddRazorPagesOptions(o=> { o.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute()); }); }
這將關(guān)閉整個應(yīng)用程序的防偽令牌驗證。請注意,禁用防偽令牌驗證不會阻止生成隱藏字段或cookie。它只是跳過驗證過程。
我們知道防偽令牌是通過FormTagHelper生成的,好在ASP.NET Core MVC提供了全局設(shè)置標(biāo)簽助手的方法:
public void ConfigureServices(IServiceCollection services) { services.AddMvc().InitializeTagHelper<FormTagHelper>((helper, context) => helper.Antiforgery = false); }
所以全局禁用防偽令牌驗證的完整代碼如下:
public void ConfigureServices(IServiceCollection services) { services.AddMvc().AddRazorPagesOptions(o=> { o.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute()); }).InitializeTagHelper<FormTagHelper>((helper, context) => helper.Antiforgery = false); }
部分禁用
如果您希望僅禁用特定方法或頁面模型的驗證,包括如下兩個方法:
1、在Startup類的ConfigureServices方法進(jìn)行配置,不過要提供頁面的路徑:
public void ConfigureServices(IServiceCollection services) { services.AddMvc().AddRazorPagesOptions(opotions => { opotions.Conventions.AddPageApplicationModelConvention("/demo", pageApplicationModel => pageApplicationModel.Filters.Add(new IgnoreAntiforgeryTokenAttribute())); }); }
在此處,我們禁用了 demo 頁面的防偽令牌驗證。
2、在PageModel上面使用標(biāo)記:
[IgnoreAntiforgeryToken(Order = 1001)] public class DemoModel : PageModel { public void OnPost() { } }
ValidateAntiForgeryToken標(biāo)記默認(rèn)的Order屬性為1000,因此IgnoreAntiforgeryToken屬性需要一個更高的序號。
上面我們已經(jīng)說過了禁用防偽令牌驗證不會阻止生成隱藏字段或cookie,所以需要禁用FormTagHelper生成令牌。
<form method="post" asp-antiforgery="false"> </form>
關(guān)于這個話題就介紹完了,如果您感興趣,不防測試一下。
相關(guān)文章
ASP.NET Core中使用令牌桶限流的實(shí)現(xiàn)
這篇文章主要介紹了ASP.NET Core中使用令牌桶限流的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04asp.net下GDI+的一些常用應(yīng)用(水印,文字,圓角處理)技巧
asp.net下GDI+的一些常用應(yīng)用(水印,文字,圓角處理)技巧...2007-03-03一個伴隨ASP.NET從1.0到4.0的OutputCache Bug介紹
一個伴隨ASP.NET從1.0到4.0的OutputCache Bug介紹,學(xué)習(xí).net的朋友可以參考下。2011-11-11未在本地計算機(jī)上注冊“microsoft.ACE.oledb.12.0”提供程序報錯的解決辦法
這篇文章主要給大家介紹了關(guān)于未在本地計算機(jī)上注冊“microsoft.ACE.oledb.12.0”提供程序報錯的完美解決辦法,需要的朋友可以參考下2019-03-03asp.net在后端動態(tài)添加樣式表調(diào)用的方法
這篇文章主要介紹了asp.net在后端動態(tài)添加樣式表調(diào)用的方法,涉及asp.net操作樣式表的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-04-04