ASP.NET Core 2.0中Razor页面禁用防伪令牌验证
|
在这篇短文中,我将向您介绍如何ASP.NET Core Razor页面中禁用防伪令牌验证。 Razor页面是ASP.NET Core 2.0中增加的一个页面控制器框架,用于构建动态的、数据驱动的网站;支持跨平台开发,可以部署到Windows,Unix和Mac操作系统。 跨站点请求伪造(也称为XSRF或CSRF)是对Web托管应用程序的攻击,因为恶意网站可能会影响客户端浏览器和浏览器信任网站之间的交互。这种攻击是完全有可能的,因为Web浏览器会自动在每一个请求中发送某些身份验证令牌到请求网站。这种攻击形式也被称为 一键式攻击 或 会话控制,因为攻击利用了用户以前认证的会话。关于这个话题可以看我的另一篇博客:ASP.NET Core 防止跨站请求伪造(XSRF/CSRF)攻击。 Razor页面被设计为默认启动防跨站请求伪造攻击的,防伪令牌生成和验证被自动包含在Razor页面中。但是,在某些情况下,您可能想禁用它。 全局禁用要在Razor页面中全局禁用防伪令牌验证,可以在Startup类的ConfigureServices方法中禁用:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().AddRazorPagesOptions(o=>
{
o.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute());
});
}
这将关闭整个应用程序的防伪令牌验证。请注意,禁用防伪令牌验证不会阻止生成隐藏字段或cookie。它只是跳过验证过程。 我们知道防伪令牌是通过FormTagHelper生成的,好在ASP.NET Core MVC提供了全局设置标签助手的方法:
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方法进行配置,不过要提供页面的路径:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().AddRazorPagesOptions(opotions =>
{
opotions.Conventions.AddPageApplicationModelConvention("/demo",pageApplicationModel => pageApplicationModel.Filters.Add(new IgnoreAntiforgeryTokenAttribute()));
});
}
在此处,我们禁用了 demo 页面的防伪令牌验证。 2、在PageModel上面使用标记:
[IgnoreAntiforgeryToken(Order = 1001)]
public class DemoModel : PageModel
{
public void OnPost()
{
}
}
ValidateAntiForgeryToken标记默认的Order属性为1000,因此IgnoreAntiforgeryToken属性需要一个更高的序号。 上面我们已经说过了禁用防伪令牌验证不会阻止生成隐藏字段或cookie,所以需要禁用FormTagHelper生成令牌。 <form method="post" asp-antiforgery="false"> </form> 关于这个话题就介绍完了,如果您感兴趣,不防测试一下。 (编辑:日照站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 为熟悉ASP.NET Web表单开发的人建议MVC3的周末学习轨道
- asp.net-mvc-3 – dataannotations在主键上设置标识种子值,
- asp.net-mvc-3 – 带Razor的条件显示元素
- asp.net-mvc – 访问ASP.NET MVC应用程序中的控制器/操作列
- asp.net下文件上传和文件删除的代码
- asp.net-mvc – 如何在ASP.NET MVC4中使用具有唯一标识符UR
- asp.net – Html.Partial()跳过控制器动作
- asp.net – 多个用户控件和JavaScript
- Autofac和ASP.NET Web API ApiController
- asp.net 文件下载功能函数代码整理
- asp.net-mvc-3 – 实体框架乐观并发异常未发生
- asp.net – 嵌套的web.config转换
- 看美剧英文字幕学英语的利器深蓝英文字幕助手简介
- asp.net-mvc – 在OS X 10.7.4上的MonoDevelop中
- asp.net – Intranet / Internet的Windows身份验
- 在asp.net mvc中如何使用usercontrols来显示“岛
- asp.net – 使用app_offline.htm使应用程序脱机,
- asp.net – 我可以愚弄HttpRequest.Current.Requ
- 在IIS / ASP.Net中的.NET 1.1应用程序中创建.NET
- asp.net-mvc – 用于选择的KendoUI网格Ajax绑定参
