在这篇短文中, 我将向您介绍如何 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);
}
部分禁用
如果您希望仅禁用特定方法或页面模型的验证, 包括如下两个方法:
在 Startup 类的 ConfigureServices 方法进行配置, 不过要提供页面的路径:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().AddRazorPagesOptions(opotions =>
{
opotions.Conventions.AddPageApplicationModelConvention("/demo",
pageApplicationModel => pageApplicationModel.Filters.Add(new IgnoreAntiforgeryTokenAttribute()));
});
}
在此处, 我们禁用了 demo 页面的防伪令牌验证.
在 PageModel 上面使用标记:
[IgnoreAntiforgeryToken(Order = 1001)]
public class DemoModel : PageModel
{
public void OnPost()
{
}
}
ValidateAntiForgeryToken
标记默认的 Order 属性为 1000, 因此
IgnoreAntiforgeryToken
属性需要一个更高的序号.
上面我们已经说过了禁用防伪令牌验证不会阻止生成隐藏字段或 cookie, 所以需要禁用 FormTagHelper 生成令牌.
<form method="post" asp-antiforgery="false">
</form>
关于这个话题就介绍完了, 如果您感兴趣, 不防测试一下.
来源: https://www.cnblogs.com/tdfblog/p/disable-antiforgery-token-validation-in-asp-net-core-razor-page.html