何时不需要/不需要使用AntiForgeryToken?

Art*_*aru 23 csrf antiforgerytoken asp.net-mvc-3

UPD:security.stackexchange.com上提出同样的问题,我得到的答案是不同的.请关注那里,以获得正确的答案!

我正在运行一个相当大的网站,每天都有成千上万的访问量,而且用户群相当大.

自从我开始迁移到MVC 3以来,我一直在以多种形式放置AntiForgeryToken,修改受保护的数据等.

其他一些形式,如登录/注册现在也使用AntiForgeryToken,但我首先对它们的需求感到怀疑,原因有两个......

  1. 登录表单要求海报知道正确的凭据.我真的无法想到csrf攻击会在这里受益.特别是如果我检查请求来自同一主机(检查Referrer标头)
  2. 每次加载页面时,AntiForgeryToken令牌都会生成不同的值.如果我有两个选项卡打开登录页面,然后尝试发布它们,第一个将成功加载.第二个将失败并出现AntiForgeryTokenException(首先加载两个页面,然后尝试发布它们).使用更安全的页面 - 这显然是一个必要的恶魔,登录页面 - 似乎有点矫枉过正,只是要求麻烦:S

可能还有其他原因可以解释为什么人们会在表单中使用/不使用令牌.我是否认为在每个帖子中使用令牌都是错误的/矫枉过正的,如果是这样的话 - 哪种表格会从中受益,哪些人肯定不会受益?

Dar*_*rov 13

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

  1. 恶意用户在其网站上设置类似于您网站的HTML表单.此表单也可以包含隐藏字段.
  2. 他欺骗你的一个网站用户访问他的恶意网址.
  3. 用户认为他在您的网站上,填写表单并将其提交到您的网站.
  4. 如果用户已在您的站点上进行了身份验证,则表单提交成功,并且毫无戒心的用户已删除其帐户(或您可以想象的任何内容).

因此,您可以在站点的经过身份验证的部分上使用防伪标记,其中包含可能以某种方式修改用户状态的操作.

备注:检查Referer标头以确定请求来自您的站点是不安全的.任何人都可以伪造一个请求并欺骗这个标题.

  • 对不起,这是错误的 - 请参阅http://security.stackexchange.com/q/2120/33. (20认同)
  • 这个答案是危险的错误.令牌是必要的.请参阅此处的简单示例攻击:http://security.stackexchange.com/questions/2120/when-the-use-of-a-antiforgerytoken-is-not-required-needed (5认同)