你能解释一下ValidateAntiForgeryToken的目的,并向我展示关于MVC 4中的ValidateAntiForgeryToken的例子吗?

我找不到任何例子来解释这个属性。


MVC的防伪造支持将一个唯一的值写入一个HTTP-only cookie,然后将相同的值写入表单。当页面提交时,如果cookie值与表单值不匹配,则会引发错误。

需要注意的是,该特性可以防止跨站点请求伪造。也就是说,来自另一个站点的表单,它向您的站点发布内容,试图使用经过身份验证的用户凭据提交隐藏内容。这种攻击包括诱骗登录用户提交表单,或者在页面加载时简单地通过编程触发表单。

该功能不能防止任何其他类型的数据伪造或基于篡改的攻击。

要使用它,请使用ValidateAntiForgeryToken属性装饰动作方法或控制器,并在提交到该方法的表单中调用@Html.AntiForgeryToken()。

ValidateAntiForgeryToken属性的基本目的是防止跨站请求伪造攻击。

跨站请求伪造是一种攻击,在这种攻击中,有害的脚本元素、恶意命令或代码从可信用户的浏览器发送。欲了解更多信息,请访问 http://www.asp.net/mvc/overview/security/xsrfcsrf-prevention-in-aspnet-mvc-and-web-pages。

它使用简单,你需要用ValidateAntiForgeryToken属性来装饰方法,如下所示:

[HttpPost]  
[ValidateAntiForgeryToken]  
public ActionResult CreateProduct(Product product)  
{
  if (ModelState.IsValid)  
  {
    //your logic 
  }
  return View(ModelName);
}

它来源于System.Web.Mvc命名空间。

在您的视图中,添加此代码以添加令牌,以便在提交表单时使用它来验证表单。

@Html.AntiForgeryToken()

在ASP。Net Core防伪造令牌会自动添加到表单中,因此如果您使用razor表单元素或使用IHtmlHelper,则不需要添加@Html.AntiForgeryToken()。BeginForm,如果表单的方法不是GET。

它会为你的表单生成类似这样的输入元素:

<input name="__RequestVerificationToken" type="hidden" 
       value="CfDJ8HSQ_cdnkvBPo-jales205VCq9ISkg9BilG0VXAiNm3Fl5Lyu_JGpQDA4_CLNvty28w43AL8zjeR86fNALdsR3queTfAogif9ut-Zd-fwo8SAYuT0wmZ5eZUYClvpLfYm4LLIVy6VllbD54UxJ8W6FA">

当用户提交表单时,如果启用验证,则在服务器端验证此令牌。

[ValidateAntiForgeryToken]属性可用于操作。对应用了此过滤器的操作发出的请求将被阻止,除非该请求包含有效的防伪造令牌。

[AutoValidateAntiforgeryToken]属性可以用于控制器。此属性的工作原理与ValidateAntiForgeryToken属性相同,除了它不需要使用以下HTTP方法发出请求的令牌: 获取头部选项跟踪

附加信息: learn.microsoft.com/aspnet/core/security/anti-request-forgery