假设应用程序对CSRF攻击的唯一防御是检查相同来源的引用标头。还假设所有浏览器都将发送引用标头(尽管情况并非如此)。
我读到用户欺骗自己的引用标头是微不足道的,但是对于CSRF攻击者而言IMPOSSIBLE也是如此。
1。)你如何欺骗引用标题? (注意,referer标头不能以编程方式modified)
2。)为什么CSRF攻击者不能这样做?
答案 0 :(得分:3)
确实,在自己的浏览器上欺骗引荐来源标头是微不足道的,即使您无法以编程方式修改它们。诀窍是在浏览器发送请求之后但在它到达服务器之前拦截请求。
使用Burp Suite之类的拦截代理可以轻松完成此操作。基本上,您告诉浏览器使用本地拦截代理作为代理服务器。然后浏览器将向本地代理发出请求。本地代理将使请求保持活动状态,并允许您在HTTP文本中更改所需内容,包括引用标头。准备就绪后,您只需发布请求,本地代理就会将其发送出去。十分简单。
另外值得注意的是,如果您不在您的网站上使用TLS,那么沿途的任何跃点都可能是邪恶的,并且如果他们愿意,可以修改请求/响应。为了了解许多跳跃的方法,您可以尝试traceroute(尽管有些路由器只会丢弃使traceroute工具工作的数据包,因此它不是可靠的测量方法。)
然而,在纯CSRF攻击的情况下,攻击者无法控制受害者的浏览器。这意味着受害者的浏览器将直接向Web服务器发出请求,并像往常一样发送正确的引用标头。这就是为什么改变受害者的引用者标题是不可能的,即使引用标题通常是可怕的安全实践,因为它们很容易被欺骗。
大家都说,打击CSRF的最佳解决方案是使用CSRF令牌。 OWASP recommends using the origin header and a CSRF token
希望这会有所帮助。如果没有,请在评论中告诉我,我会尽力澄清。