我在其中一个页面中滥用了WebMatrix的AntiForgery.Validate Helper吗?

时间:2013-02-08 16:31:18

标签: c# html forms security webmatrix

在看到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)分支)提交表单的用户是相同的页面加载时登录的用户?

如果是这样,那么,我是否也正确地假设以这种方式利用这个类在登录页面中没有位置?

1 个答案:

答案 0 :(得分:1)

如果您查看codeplex上的源代码,AntiForgery使用AntiForgeryWorker使用TokenValidatorValidateTokens方法会执行一些身份和用户名检查。如果你没有抛出异常,它可能会进行一定程度的验证,但使用""作为用户名。

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

然而,"锻造&#34>的用例是什么?登录页面?如果伪造者知道要提交的凭据,他们可以自己登录。如果AntiForgery在这里没有发挥其全部潜力可能无关紧要。