337

你能解释一下ValidateAntiForgeryToken的目的并给我看ValidateAntiForgeryTokenMVC 4 中的例子吗?

我找不到任何解释此属性的示例?

4

3 回答 3

375

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

重要的是要注意该功能可以防止跨站点请求伪造。也就是说,来自另一个站点的表单发布到您的站点,以尝试使用经过身份验证的用户的凭据提交隐藏内容。攻击涉及欺骗登录用户提交表单,或者在页面加载时简单地以编程方式触发表单。

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

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

于 2012-11-29T08:58:24.430 回答
55

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()
于 2014-11-11T04:40:59.173 回答
13

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

它将为您的表单生成类似于以下内容的输入元素:

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

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

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

[AutoValidateAntiforgeryToken]属性可用于控制器。此属性与 ValidateAntiForgeryToken 属性的工作方式相同,只是它不需要使用以下 HTTP 方法发出的请求的令牌: GET HEAD OPTIONS TRACE

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

于 2019-10-27T13:12:07.950 回答