<h1>Congratulations! You're a Winner!</h1> <form action="https://good-banking-site.com/api/account" method="post"> <input type="hidden" name="Transaction" value="withdraw" /> <input type="hidden" name="Amount" value="1000000" /> <input type="submit" value="Click to collect your prize!" /> </form>注意,表单的提交是向受信任的站点提交,而不是向恶意站点提交,这是 XSRF/CSRF中所描述的 "跨站"
(5) 该请求在 www.good-banking-site.example.com 服务器上运行,使用用户的身份,可以使用经过身份验证用户进行任何事情的操作
<form method="post"> <!-- ... --> </form>生成的HTML如下:
<form method="post" asp-antiforgery="false"> <!-- ... --> </form>(2) 不使用FormTagHelper表单
<!form method="post"> <!-- ... --> </!form>(3) 移除FormTagHelper标签
builder.Services.AddAntiforgery(options => { //防伪造系统用于在视图中呈现防伪造令牌的隐藏表单域的名称 options.FormFieldName = "AntiforgeryFieldname"; //防伪造系统使用的标头的名称。如果为 null,则系统仅考虑表单数据 options.HeaderName = "X-XSRF-TOKEN"; options.SuppressXFrameOptionsHeader = false; });四. 验证Token
[HttpPost] [ValidateAntiForgeryToken] public IActionResult Index() { // ... return RedirectToAction(); }也可以使用AutoValidateAntiforgeryToken,该特性不会验证下列请求 GET,HEAD,OPTIONS,TRACE,它可以在应用程序中作为全局过滤器来触发防伪token验证,该特性可以应用于如下请求POST,PUT,PATCH,DELETE不需要将ValidateAntiForgeryToken特性提交到每个action上。
//全局示例 //可以使用 IgnoreAntiforgeryToken 筛选器,给指定的Action(或控制器)无需防伪造令牌 builder.Services.AddControllersWithViews(options => { // 堆代码 duidaima.com options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute()); });你也可以使用IgnoreAntiforgeryToken特性来忽视防伪token的验证。