ASP.NET Core 2.0中Razor頁面禁用防偽令牌驗(yàn)證
在這篇短文中,我將向您介紹如何ASP.NET Core Razor頁面中禁用防偽令牌驗(yàn)證。
Razor頁面是ASP.NET Core 2.0中增加的一個(gè)頁面控制器框架,用于構(gòu)建動(dòng)態(tài)的、數(shù)據(jù)驅(qū)動(dòng)的網(wǎng)站;支持跨平臺(tái)開發(fā),可以部署到Windows,Unix和Mac操作系統(tǒng)。
跨站點(diǎn)請(qǐng)求偽造(也稱為XSRF或CSRF)是對(duì)Web托管應(yīng)用程序的攻擊,因?yàn)閻阂饩W(wǎng)站可能會(huì)影響客戶端瀏覽器和瀏覽器信任網(wǎng)站之間的交互。這種攻擊是完全有可能的,因?yàn)閃eb瀏覽器會(huì)自動(dòng)在每一個(gè)請(qǐng)求中發(fā)送某些身份驗(yàn)證令牌到請(qǐng)求網(wǎng)站。這種攻擊形式也被稱為 一鍵式攻擊 或 會(huì)話控制,因?yàn)楣衾昧擞脩粢郧罢J(rèn)證的會(huì)話。關(guān)于這個(gè)話題可以看我的另一篇博客:ASP.NET Core 防止跨站請(qǐng)求偽造(XSRF/CSRF)攻擊。
Razor頁面被設(shè)計(jì)為默認(rèn)啟動(dòng)防跨站請(qǐng)求偽造攻擊的,防偽令牌生成和驗(yàn)證被自動(dòng)包含在Razor頁面中。但是,在某些情況下,您可能想禁用它。
全局禁用
要在Razor頁面中全局禁用防偽令牌驗(yàn)證,可以在Startup類的ConfigureServices方法中禁用:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().AddRazorPagesOptions(o=>
{
o.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute());
});
}
這將關(guān)閉整個(gè)應(yīng)用程序的防偽令牌驗(yàn)證。請(qǐng)注意,禁用防偽令牌驗(yàn)證不會(huì)阻止生成隱藏字段或cookie。它只是跳過驗(yàn)證過程。
我們知道防偽令牌是通過FormTagHelper生成的,好在ASP.NET Core MVC提供了全局設(shè)置標(biāo)簽助手的方法:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().InitializeTagHelper<FormTagHelper>((helper, context) => helper.Antiforgery = false);
}
所以全局禁用防偽令牌驗(yàn)證的完整代碼如下:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().AddRazorPagesOptions(o=>
{
o.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute());
}).InitializeTagHelper<FormTagHelper>((helper, context) => helper.Antiforgery = false);
}
部分禁用
如果您希望僅禁用特定方法或頁面模型的驗(yàn)證,包括如下兩個(gè)方法:
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 頁面的防偽令牌驗(yàn)證。
2、在PageModel上面使用標(biāo)記:
[IgnoreAntiforgeryToken(Order = 1001)]
public class DemoModel : PageModel
{
public void OnPost()
{
}
}
ValidateAntiForgeryToken標(biāo)記默認(rèn)的Order屬性為1000,因此IgnoreAntiforgeryToken屬性需要一個(gè)更高的序號(hào)。
上面我們已經(jīng)說過了禁用防偽令牌驗(yàn)證不會(huì)阻止生成隱藏字段或cookie,所以需要禁用FormTagHelper生成令牌。
<form method="post" asp-antiforgery="false"> </form>
關(guān)于這個(gè)話題就介紹完了,如果您感興趣,不防測(cè)試一下。
相關(guān)文章
asp.net session的使用與過期實(shí)例代碼
本文章來簡單的介紹asp.net中session常見兩種用法,一種是session使用如何創(chuàng)建,另一種是告訴你如何判斷session過期了,有需要了解的朋友可以參考一下2013-08-08
瀏覽器窗口滾動(dòng)加載數(shù)據(jù)采用異步形式從后臺(tái)加載數(shù)據(jù)
在滾動(dòng)條距頂部距離(頁面超出窗口的高度)時(shí)采用異步形式從后臺(tái)加載數(shù)據(jù),下面是具體的實(shí)現(xiàn),希望對(duì)大家有所幫助2014-01-01
Asp.net 獲取指定目錄下的后綴名為".doc" 的所有文件名和文件路徑
Asp.net 獲取指定目錄下的后綴名為“.doc” 的所有文件名和文件路徑,幫寫一個(gè)方法2011-07-07
asp.net Repeater取得CheckBox選中的某行某個(gè)值的c#寫法
asp.net(c#)利用Repeater取得CheckBox選中行的某個(gè)值的代碼2008-08-08
asp.net treeview checkbox 相關(guān)問題
asp.net treeview checkbox 相關(guān)問題,需要的朋友可以看下。2009-06-06
.NET實(shí)現(xiàn)倉儲(chǔ)Repository(AI)的操作方法
倉儲(chǔ)模式是一種在應(yīng)用程序中使用的設(shè)計(jì)模式,它將數(shù)據(jù)訪問邏輯與業(yè)務(wù)邏輯分離,通過倉儲(chǔ)接口和倉儲(chǔ)實(shí)現(xiàn)類,您可以定義和實(shí)現(xiàn)數(shù)據(jù)的增刪改查操作,這篇文章主要介紹了.NET?實(shí)現(xiàn)倉儲(chǔ)Repository(AI),需要的朋友可以參考下2023-09-09
ASP.NET MVC5網(wǎng)站開發(fā)修改及刪除文章(十)
這篇文章主要為大家詳細(xì)介紹了ASP.NET MVC5網(wǎng)站開發(fā)修改及刪除文章,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-09-09

