我正在运行一个相当大的网站,每天有数千次访问,以及相当大的用户群。自从我开始迁移到 MVC 3 以来,我一直将 AntiForgeryToken 置于多种形式中,用于修改受保护的数据等。
其他一些形式,比如登录和注册现在也使用 AntiForgeryToken,但我开始怀疑他们的需求,原因有几个......
登录表单要求发布者知道正确的凭据。我真的想不出任何方式 CSRF 攻击会在这里受益,特别是如果我检查请求来自同一主机(检查 Referer 标头)。
每次加载页面时,AntiForgeryToken 令牌都会生成不同的值。如果我在登录页面打开了两个选项卡,然后尝试发布它们,第一个将成功加载。第二个将失败并出现 AntiForgeryTokenException(首先加载两个页面,然后尝试发布它们)。对于更安全的页面——这显然是一个必要的邪恶,对于登录页面——似乎有点矫枉过正,只是自找麻烦。
应该使用或不使用某种形式的令牌可能还有其他原因。我是否正确假设在每个帖子表单中使用令牌都是过大的,如果是这样 - 什么样的表单会从中受益,哪些肯定不会受益?
PS StackOverflow 上也有人问过这个问题,但我并不完全相信。我想我会在这里问它,以获得更多的安全保障