在这篇短文中,我将向您介绍如何在 www.sychzs.cn Core Razor 页面中禁用防伪造令牌验证。
Razor页面是www.sychzs.cn Core 2.0中添加的页面控制器框架,用于构建动态的、数据驱动的网站;支持跨平台开发,可以部署到Windows、Unix和Mac操作系统。
跨站点请求伪造(也称为 XSRF 或 CSRF)是对 Web 托管应用程序的攻击,因为恶意网站可能会影响客户端浏览器与浏览器信任的网站之间的交互。这种攻击是完全可能的,因为网络浏览器会在每次请求时自动向请求网站发送某些身份验证令牌。这种形式的攻击也称为一键攻击或会话控制,因为该攻击利用了用户之前经过身份验证的会话。关于这个话题,你可以阅读我的另一篇博客:www.sychzs.cn Core防止跨站请求伪造(XSRF/CSRF)攻击。
Razor 页面设计为默认启用防跨站请求伪造攻击,并且 Razor 页面中自动包含防伪造令牌生成和验证。但是,在某些情况下您可能想要禁用它。
要在 Razor 页面中全局禁用防伪令牌验证,您可以在 Startup 类的 ConfigureServices 方法中禁用它:
公共无效ConfigureServices(IServiceCollection服务) { services.AddMvc().AddRazorPagesOptions(o=> { o.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute()); }); }
这将关闭整个应用程序的防伪令牌验证。请注意,禁用防伪令牌验证并不会阻止生成隐藏字段或 cookie。它只是跳过验证过程。
我们知道防伪令牌是通过FormTagHelper生成的。幸运的是,www.sychzs.cn Core MVC 提供了一种全局设置标签助手的方法:
公共无效ConfigureServices(IServiceCollection服务) {services.AddMvc().InitializeTagHelper((helper, context) => helper.Antiforgery = false); }
所以全局禁用防伪令牌验证的完整代码如下:
公共无效ConfigureServices(IServiceCollection服务) { services.AddMvc().AddRazorPagesOptions(o=> { o.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute()); }).InitializeTagHelper((helper, context) => helper.Antiforgery = false); }
如果您只想禁用特定方法或页面模型的验证,这里有两种方法:
1。在Startup类的ConfigureServices方法中进行配置,但提供页面路径:
公共无效ConfigureServices(IServiceCollection服务) { services.AddMvc().AddRazorPagesOptions(选项=> { options.Conventions.AddPageApplicationModelConvention("/demo", pageApplicationModel => pageApplicationModel.Filters.Add(new IgnoreAntiforgeryTokenAttribute())); }); }
这里我们禁用了演示页面的防伪令牌验证。
2。在 PageModel 上使用标记:
[忽略AntiforgeryToken(订单= 1001)]公共类演示模型:PageModel { 公共无效OnPost() { } }
ValidateAntiForgeryToken 标签的默认 Order 属性为 1000,因此 IgnoreAntiForgeryToken 属性需要更高的序列号。
上面我们已经说过,禁用防伪令牌验证并不会阻止隐藏字段或cookie的生成,因此需要禁用FormTagHelper才能生成令牌。
这个话题的介绍到此结束。如果您有兴趣,请随意测试一下。