在看到AntiForgery.Validate()方法错误(当表单令牌不验证时,它应该这样做)并访问此站点之后:http://msdn.microsoft.com/en-us/library/system.web.helpers.antiforgery(v=vs.111).aspx
要了解更多信息,我可能在过去误用过这个。
我在登录页面上使用了AntiForgery.GetHTML()和AntiForgery.Validate()的组合,但不确定放在那里是否有意义。没有登录,用户总是“”(空字符串),所以我想我最初认为使用AntiForgery类做的比实际做的要多。因此,我的问题是:
我是否正确地认为,上述做法执行的唯一安全检查只是确保(通过将AntiForgery.Validate();放在if(IsPost)分支中)提交表单的用户是加载页面时登录的同一用户?
如果是的话,那么,我是否也正确地假设以这种方式使用这个类在登录页面中没有位置?

最佳答案

如果查看codeplex上的源代码,AntiForgery使用AntiForgeryWorker它使用TokenValidator,则ValidateTokens方法会执行一些身份和用户名检查。如果没有引发异常,则它可能正在执行某种级别的验证,但使用“”作为用户名。

if (!String.Equals(fieldToken.Username, currentUsername, (useCaseSensitiveUsernameComparison) ? StringComparison.Ordinal : StringComparison.OrdinalIgnoreCase))
{
    throw HttpAntiForgeryException.CreateUsernameMismatchException(fieldToken.Username, currentUsername);
}

然而,“伪造”登录页面的用例是什么?如果伪造者知道要提交的凭据,他们可以自己登录。在这里,如果抗酒精性酒没有发挥出它的全部潜能,那就没关系了。

关于c# - 我是否在我的页面之一中滥用了WebMatrix的AntiForgery.Validate助手?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14777101/

10-09 01:07