【发布时间】:2011-05-01 04:54:15
【问题描述】:
我们收到“所需的防伪令牌未提供或无效”。错误,经过进一步调查,我设法以最简单的形式重现了问题 - 我要么做错了,要么这是防伪令牌系统的限制。
无论哪种方式,我都会很感激一些建议!
空的 MVC 2 项目: 一个视图页面,一个控制器
查看:
<%--Sign in form:--%>
<% using(Html.BeginForm("SignIn", "Home", FormMethod.Post)) {%>
<%= Html.AntiForgeryToken()%>
<input type="submit" value="Sign in" />
<%}%>
控制器:
public ActionResult Index()
{
ViewData["status"] = "Index";
return View();
}
[ValidateAntiForgeryToken]
public ActionResult SignIn()
{
ViewData["status"] = "Signed In!";
FormsAuthentication.SetAuthCookie("username", false);
return View("Index");
}
[编辑:简化代码示例]
要重新创建异常,请打开两个未登录的选项卡 - 在第一个选项卡上登录,然后在第二个选项卡上登录。
当我猜测正确的行为是重定向到登录页面(共享原始登录选项卡的会话/身份验证)时,第二个选项卡将始终引发防伪异常
任何建议将不胜感激!
干杯, 戴夫
【问题讨论】:
-
我最终解决了这个问题,完全删除了防伪令牌。如果您考虑一下,无论如何将它放在您网站的登录部分并没有任何帮助 - 因为攻击者必须知道您的用户名和密码!
标签: asp.net asp.net-mvc asp.net-mvc-2 antiforgerytoken