检查引荐来源是否足以防止跨站点请求伪造攻击?我知道引用者可能是欺骗者,但攻击者是否有办法为客户端做这件事?我知道令牌是常态,但这会有效吗?
答案 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,然后在发布时,检查您收到的那个,并查看它是否与您期望的那个匹配。如果没有,你就失败了。无论哪种方式,您之后都会生成一个新令牌。
如果有多个页面,也可能需要考虑这会弄乱人们;所以你可能希望每页制作一个不同的标记。