【发布时间】:2013-09-06 11:03:51
【问题描述】:
当我阅读 ASP.NET MVC 实现的防伪系统生成一个可在同一会话中重用的令牌时,我的问题是为什么每次我在我的应用程序中生成一个新表单时这个令牌都会改变?我说的是隐藏输入字段,而不是 cookie 值。
谢谢。
【问题讨论】:
标签: asp.net-mvc antiforgerytoken
当我阅读 ASP.NET MVC 实现的防伪系统生成一个可在同一会话中重用的令牌时,我的问题是为什么每次我在我的应用程序中生成一个新表单时这个令牌都会改变?我说的是隐藏输入字段,而不是 cookie 值。
谢谢。
【问题讨论】:
标签: asp.net-mvc antiforgerytoken
取自 Professional ASP.NET.MVC 3 book
令牌验证 ASP.NET MVC 包含一种防止 CSRF 的好方法 攻击,它的工作原理是验证用户 向您的网站提交数据是自愿的。最简单的方法 这样做是将隐藏的输入嵌入到每个表单请求中 包含唯一值。您可以通过 HTML Helpers 执行此操作 包括这种形式的各种形式:
<form action=”/account/register”
> method=”post”> <@Html.AntiForgeryToken()> … </form>
Html.AntiForgeryToken 将输出一个加密值作为隐藏 输入:这个值 将匹配存储为会话 cookie 中的另一个值 用户的浏览器。发布表单时,将匹配这些值 使用 ActionFilter:
[ValidateAntiforgeryToken] public ActionResult
> Register(…)
【讨论】:
没有。令牌没有被重复使用。
每次页面刷新都会在表单输入中生成一个新值(以及 Cookie,以防它无效或不存在)。提交后,服务器将尝试将表单值与 Cookie 值进行匹配。
【讨论】: