Asp.net mvc 3 当不需要/不需要使用反伪造代币时?

Asp.net mvc 3 当不需要/不需要使用反伪造代币时?,asp.net-mvc-3,csrf,antiforgerytoken,Asp.net Mvc 3,Csrf,Antiforgerytoken,UPD:上问的问题相同,但我得到的答案不同。请跟随那里,得到正确的答案 我正在运行一个相当大的网站,每天有数千次访问,还有一个相当大的用户群 自从我开始迁移到MVC 3以来,我一直将AntiForgeryToken放在许多表单中,用于修改受保护的数据等 其他一些表单,比如登录/注册,现在也使用AntiForgeryToken,但我开始怀疑它们是否需要,原因有两个 登录表单要求海报知道正确的凭据。我真的想不出csrf攻击在这里有什么好处。特别是如果我检查请求是否来自同一主机(检查referer头)

UPD:上问的问题相同,但我得到的答案不同。请跟随那里,得到正确的答案

我正在运行一个相当大的网站,每天有数千次访问,还有一个相当大的用户群

自从我开始迁移到MVC 3以来,我一直将AntiForgeryToken放在许多表单中,用于修改受保护的数据等

其他一些表单,比如登录/注册,现在也使用AntiForgeryToken,但我开始怀疑它们是否需要,原因有两个

  • 登录表单要求海报知道正确的凭据。我真的想不出csrf攻击在这里有什么好处。特别是如果我检查请求是否来自同一主机(检查referer头)
  • 每次加载页面时,AntiForgeryToken令牌都会生成不同的值。。如果我在登录页面中打开了两个选项卡,然后尝试发布它们,第一个选项卡将成功加载。第二个将失败,出现AntiForgeryTokenException(首先加载两个页面,然后尝试发布它们)。对于更安全的页面,这显然是一个必要的缺点,对于登录页面,这似乎是杀伤力过大,只是自找麻烦:S

  • 可能还有其他原因导致人们会使用/不使用其形式的令牌。。我是否正确地假设在每个post表单中使用令牌是不好的/过分的,如果是这样的话-什么样的表单会从中受益,哪些表单肯定不会受益?

    防伪令牌在用户尚未通过身份验证的网站公共部分(如登录和注册表单)是无用的。CSRF攻击的工作方式如下:

  • 恶意用户在其站点上设置与您的站点相似的HTML表单。此表单也可以包含隐藏字段
  • 他欺骗你的一个网站用户访问他的恶意url
  • 用户认为他在您的站点上,填写表单并将其提交到您的站点
  • 如果用户已经在您的站点上进行了身份验证,则表单提交成功,并且毫无戒心的用户已经删除了他的帐户(或者任何您可以想象的)
  • 因此,您可以在站点的经过身份验证的部分使用防伪令牌,其中包含可以以某种方式修改用户状态的操作


    备注:检查Referer标头以确定来自您站点的请求不安全。任何人都可以伪造请求并伪造此标题。

    我同意你关于伪造引用者标题的观点,但。。如果POST请求上的referer头不同-这意味着肯定有问题,对吗?:)我不是说它总是能保护我。。这可能是另一个安全边界useful@Binder,想象一下黑客向你发送一封电子邮件,假装这封电子邮件来自你的银行(称为网络钓鱼),告诉你点击电子邮件中的链接以更新你的帐户详细信息。由于用户在真实站点上经过身份验证,因此他可以代表该用户在实际站点上执行任何操作。这是防伪令牌旨在防止的攻击类型。如果攻击者伪造登录页面并通过这种方式获取凭据,那么使用令牌保护真正的登录页面有什么意义?攻击者无论如何都可以使用他获得的用户名和密码登录。这个答案是危险的错误。代币是必需的。这里有一个简单的攻击示例:这里的安全专家已经回答了这个问题:@Richard您注意到您在评论中添加的链接与问题顶部的链接相同吗?这个问题是由同一个用户提出的?