Questions tagged «request-validation»

4
登录请求验证令牌问题
我一直在经历一个开发项目的错误日志,发现下面的错误(更名为保护有罪无罪) - 提供的防伪令牌是为用户“”提供的,但当前用户为“ admin”。 要复制这个问题并不是特别困难- 在登录页面打开应用程序 登录之前,请在同一台计算机上的同一浏览器中,在登录页面上打开另一个窗口或选项卡。 在第一个窗口中登录(或者实际上在第二个窗口中,顺序无关紧要) 尝试在剩余的登录窗口中登录 堆栈跟踪为- System.Web.Mvc.HttpAntiForgeryException(0x80004005):提供的防伪令牌是给用户“”的,但当前用户是“ admin”。在System.Web.Helpers.AntiXsrf.AntiForgeryWorker.Validate(HttpContextBase httpContext)(System.Web.Helpers.AntiXsrf.TokenValidator.ValidateTokens(HttpContextBase httpContext,IIdentity身份,AntiForgeryToken sessionToken,AntiForgeryToken fieldToken)在System.Web.Helpers.AntiForgery。在System.Web.Mvc.ControllerActionInvoker.InvokeAuthorizationFilters(ControllerContext controllerContext,IList`1过滤器,ActionDescriptor actionDescriptor)在System.Web.Mvc.Async.AsyncControllerActionInvoker处的System.Web.Mvc.ValidateAntiForgeryTokenAttribute.OnAuthorization(AuthorizationContext filterContext)处的Validate()。 <> c__DisplayClass25。 登录方法签名为- [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public ActionResult Login(LoginModel model, string returnUrl) { ... } 这与Internet“ ASP.NET MVC 4 Web应用程序”模板项目中的方法签名完全相同,这表明Microsoft认为ValidateAntiForgeryToken是必要/最佳实践,或者只是在此处添加了属性,因为使用了该属性。其他地方。 显然,没有什么我可以做的来处理这个问题中这种方法没有达到它的ValidateAntiForgeryToken是预请求过滤器和到达控制器之前就阻止该请求。 我可以在提交表单之前检查用户是否通过Ajax进行了身份验证,并尝试将其重定向到他们,或者只是删除了属性。 问题是这样的-我知道令牌的设计是在用户已经针对您的站点进行身份验证时阻止来自另一个站点(CSRF)的请求,因此,将其从按定义使用的表单中删除是一个问题未经身份验证的用户? 大概在这种情况下,该属性旨在减轻为您的应用程序提供伪造登录表单的恶意行为者的影响(尽管在抛出异常时,大概是用户已经输入了将被记录的详细信息,但可能会向他们发出警报)是错的)。否则,从外部站点向表单提交不正确的凭据将导致与站点本身完全相同的结果吗?我不依靠客户端验证/卫生来清理潜在的不安全输入。 是否有其他开发人员遇到过此问题(或者我们是否有非常有创造力的用户),如果是,您如何解决/缓解它? 更新:此问题完全存在于MVC5中,现在出现错误消息“提供的防伪令牌是针对与当前用户不同的基于声明的用户”。使用默认模板和身份提供程序时。微软开发人员传播者和Troy的PluralSight研究员Adam Tuliper在登录页面上的反伪造令牌中有一个相关的问题和有趣的答案,建议您删除该令牌。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.