g.p*_*dou 1 request-validation antiforgerytoken asp.net-core razor-pages
语境
我注意到,在 VS 2019 中从开箱即用的模板创建新的 ASP.NET Core Razor 页面应用程序后,即使是具有最纯粹模型类的最纯粹的html 表单也会使用<input name="__RequestVerificationToken" type="hidden" value="...">
问题
我是否遗漏了某些内容,并且在某个地方有一个显式属性/语句指示 ASP.NET Core 添加防伪功能,或者现在这是默认设置?(这使得 using[AutoValidateAntiforgeryToken]过时了)
...或者...
这只是始终无条件<input name="__RequestVerificationToken" type="hidden" value="...">渲染的,并且我可以针对它打开服务器端验证吗?这种情况下如何进行冒烟测试验证是否有效?[AutoValidateAntiforgeryToken]
示例代码
@page
@model TestFormModel
@{
ViewData["Title"] = "Home page";
}
<div class="text-center">
<form method="post">
<input type="text" name="myinput"/>
<input type="submit" value="Submit" />
</form>
</div>
//[AutoValidateAntiforgeryToken]
public class TestFormModel : PageModel
{
private readonly ILogger<TestFormModel> _logger;
public TestFormModel(ILogger<TestFormModel> logger)
{
_logger = logger;
}
public void OnGet()
{
}
public void OnPost()
{
}
}
Run Code Online (Sandbox Code Playgroud)
以前,在 ASP.NET 的 .NET Framework 版本中,您必须选择通常使用属性的防伪令牌。
\n[ValidateAntiForgeryToken]\npublic ActionResult Save(Product product)\n{\n db.Product.Add(product);\n Return View();\n}\nRun Code Online (Sandbox Code Playgroud)\n在 ASPNET Core 中,这会自动包含在Form Tag Helper中。因此,只要您的 CSHTML 包含 FORM 元素,ASPNET Core 运行时就会为您包含隐藏字段。
\n默认情况下包含此内容的基础是“约定优于配置”的口号。按照惯例,80% 以上的开发人员会选择保护他们的应用程序免受 CSRF 攻击。如果您想违反约定,可以在ConfigureServicesStartup 类部分的约定帮助器中找到选择退出的选项。
public void ConfigureServices(IServiceCollection services)\n{\n services.AddRazorPages()\n .AddRazorPagesOptions(options =>\n {\n options.Conventions\n .ConfigureFilter(new IgnoreAntiforgeryTokenAttribute());\n });\n}\nRun Code Online (Sandbox Code Playgroud)\n这篇博文进一步详细介绍了 Razor 页面、选项和使用场景。
\n\n\n如果您阅读代码,您可能会注意到没有 taghelper。\xe2\x80\x93\ng.pickardou
\n
确实有一个标签助手。在新的 Razor Pages 项目模板中,您可以在此处的文件中找到标签帮助程序_ViewImports.cshtml:
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\nRun Code Online (Sandbox Code Playgroud)\n我们可以验证您的<form />元素(如 OP 中所写)正在调用 ASP.NET 标记帮助程序,如下所示:
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\nRun Code Online (Sandbox Code Playgroud)\n如果我们检查此页面的源代码,您将看到结果
\n <form method="post">\n <input type="text" name="myinput"/>\n <input type="submit" value="Submit" />\n </form>\nRun Code Online (Sandbox Code Playgroud)\n现在,如果我们使用语法来选择退出单个标签助手
\n<form method="post">\n <input type="text" name="myinput" />\n <input type="submit" value="Submit" />\n<input name="__RequestVerificationToken" type="hidden" value="{{token}}" />\n</form>\nRun Code Online (Sandbox Code Playgroud)\n再次检查页面源代码,我们可以清楚地看到我们已明确选择退出此标签助手。
\n<!form method="post">\n <input type="text" name="myinput" />\n <input type="submit" value="Submit" />\n</!form>\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
4181 次 |
| 最近记录: |