检查引荐来源是否足以防止CSRF攻击?

时间:2009-09-12 01:10:04

标签: security csrf

检查引荐来源是否足以防止跨站点请求伪造攻击?我知道引用者可能是欺骗者,但攻击者是否有办法为客户端做这件事?我知道令牌是常态,但这会有效吗?

5 个答案:

答案 0 :(得分:39)

这是一个3岁的问题,有四个不同的答案基本上说明了同样的事情:遵循规范,使用令牌,不要尝试使用referer。

虽然令牌仍然被认为是最安全的选择,但使用引用通常要容易得多,并且也非常安全。请务必查看所有PUT / POST / PATCH / DELETE请求,如果缺少引用或来自错误的域,请将其视为攻击。真的很少(如果有的话)代理删除这些类型的请求的引用。

另请参阅OWASP recommendation关于将referer标头检查为CSRF保护:

  

检查Referer标头

     

虽然自己欺骗referer标头是微不足道的   浏览器,在CSRF攻击中不可能这样做。检查   referer是一种防止嵌入式CSRF的常用方法   网络设备,因为它不需要每用户状态。这个   当记忆存在时,使引用者成为CSRF预防的有用方法   稀少。

     

然而,检查引用者被认为是较弱的   CSRF保护。例如,打开重定向漏洞即可   用于利用受引用者保护的基于GET的请求   校验。应该注意的是,GET请求永远不应该产生一个状态   更改,因为这违反了HTTP规范。

     

参考检查也存在常见的实施错误。对于   例如,如果CSRF攻击来自HTTPS域,那么   引用将被省略。在这种情况下,缺少引用者应该是   当请求执行状态时被认为是攻击   更改。另请注意,攻击者的影响力有限   引荐。例如,如果受害者的域名是“site.com”,那么   攻击者拥有源自“site.com.attacker.com”的CSRF漏洞利用   这可能会欺骗一个破碎的引用检查实施。可以使用XSS   绕过引用者检查。

答案 1 :(得分:11)

除其他外,使用引荐来源不适用于浏览器(或公司代理)不发送引荐来源的用户。

答案 2 :(得分:4)

唯一正确的答案是“除其他外,使用引荐来源不适用于浏览器(或公司代理)不发送引荐来源的用户。”话虽如此,现在这种情况非常罕见。所有人都说推荐人可以被伪造充满了它。除非您以其他方式控制其他人的浏览器(XSS / Trojan / etc),否则您不能伪造推荐人。如果您需要推荐用于应用程序,它们与CSRF令牌一样有效。只要确保你100%确定你的支票是正确的(例如,如果你正在使用正则表达式,请确保你从推荐人的开头“^”检查。)

答案 3 :(得分:-8)

还不够,攻击者很容易为客户端做这件事,正如你所问,攻击者所要做的就是让用户点击他创建的链接,从那时起,就是游戏

攻击者将复制原始网站中使用的表单,并欺骗其余部分,因为现在代码在他自己的网站上,然后将其提交给受害者网站

正如你在提到这个问题时提到的,在防止CSRF方面,令牌是常态

答案 4 :(得分:-8)

遵循规范:使用令牌。

检查referrer实际上什么也没做,因为请求来自该页面!您试图阻止的问题是在没有用户做任何事情的情况下请求页面;不是页面被击中。

令牌是防止这种情况的方法。您生成一个,将其存储在会话中,然后将其写入HTML,然后在发布时,检查您收到的那个,并查看它是否与您期望的那个匹配。如果没有,你就失败了。无论哪种方式,您之后都会生成一个新令牌。

如果有多个页面,也可能需要考虑这会弄乱人们;所以你可能希望每页制作一个不同的标记。