你能解释一下ValidateAntiForgeryToken的目的,并向我展示MVC 4中ValidateAntiForgeryToken的例子吗?
ValidateAntiForgeryToken
我找不到任何例子来解释这个属性。
MVC的防伪造支持将一个唯一的值写入一个HTTP-only cookie,然后将相同的值写入表单。当页面提交时,如果cookie值与表单值不匹配,则会引发错误。
重要的是要注意该特性防止跨站点请求伪造。也就是说,来自另一个站点的表单,它向您的站点发布内容,试图使用经过身份验证的用户凭据提交隐藏内容。这种攻击包括诱骗登录用户提交表单,或者在页面加载时简单地通过编程触发表单。
该功能不能防止任何其他类型的数据伪造或基于篡改的攻击。
要使用它,用ValidateAntiForgeryToken属性装饰动作方法或控制器,并在发布到该方法的表单中调用@Html.AntiForgeryToken()。
@Html.AntiForgeryToken()
ValidateAntiForgeryToken属性的基本目的是防止跨站请求伪造攻击。
跨站请求伪造是指从可信用户的浏览器发送有害脚本元素、恶意命令或代码的攻击。欲了解更多信息,请访问 http://www.asp.net/mvc/overview/security/xsrfcsrf-prevention-in-aspnet-mvc-and-web-pages . < / p >
它使用简单,你需要用ValidateAntiForgeryToken属性来装饰方法,如下所示:
[HttpPost] [ValidateAntiForgeryToken] public ActionResult CreateProduct(Product product) { if (ModelState.IsValid) { //your logic } return View(ModelName); }
它来源于System.Web.Mvc命名空间。
在您的视图中,添加此代码以添加令牌,以便在提交表单时使用它来验证表单。
在ASP。Net Core防伪造令牌会自动添加到表单中,因此如果您使用razor表单元素或使用IHtmlHelper,则不需要添加@Html.AntiForgeryToken()。BeginForm,如果表单的方法不是GET。
它会为你的表单生成类似这样的输入元素:
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8HSQ_cdnkvBPo-jales205VCq9ISkg9BilG0VXAiNm3Fl5Lyu_JGpQDA4_CLNvty28w43AL8zjeR86fNALdsR3queTfAogif9ut-Zd-fwo8SAYuT0wmZ5eZUYClvpLfYm4LLIVy6VllbD54UxJ8W6FA">
当用户提交表单时,如果启用验证,则在服务器端验证此令牌。
[ValidateAntiForgeryToken]属性可用于操作。对应用了此过滤器的操作发出的请求将被阻止,除非该请求包含有效的防伪造令牌。
[ValidateAntiForgeryToken]
[AutoValidateAntiforgeryToken]属性可用于控制器。此属性的工作原理与ValidateAntiForgeryToken属性相同,除了它不需要使用以下HTTP方法发出请求的令牌: GET HEAD OPTIONS TRACE < / p > < p >附加信息: learn.microsoft.com/aspnet/core/security/anti-request-forgery < / p >
[AutoValidateAntiforgeryToken]
GET HEAD OPTIONS TRACE