【问题标题】:How is it impossible to spoof Referer Header during CSRF Attack?在 CSRF 攻击期间如何欺骗 Referer Header 是不可能的?
【发布时间】:2017-04-01 08:07:04
【问题描述】:

假设应用程序对 CSRF 攻击的唯一防御是检查相同来源的引用标头。还假设所有浏览器都将发送referer 标头(尽管情况并非总是如此)。

我读到用户欺骗他自己的引用标头是微不足道的,但 CSRF 攻击者这样做是IMPOSSIBLE

1.) 你如何欺骗引用标题? (注意,referer 标头不能以编程方式为 modified

2.) 为什么 CSRF 攻击者不能这样做?

【问题讨论】:

    标签: security csrf csrf-protection


    【解决方案1】:

    确实,在您的自己的浏览器上欺骗引荐来源网址是微不足道的,即使您不能以编程方式修改它们。诀窍是在浏览器发送请求之后,但在它到达服务器之前拦截请求。

    这可以使用Burp Suite 之类的拦截代理轻松完成。基本上你告诉浏览器使用本地拦截代理作为代理服务器。然后浏览器将向您的本地代理发出请求。本地代理将使请求保持活动状态,并允许您更改 HTTP 文本中所需的任何内容,包括引荐来源标头。准备好后,您只需释放请求,本地代理就会将其发送出去。十分简单。

    另外值得注意的是这意味着,如果您不在您的网站上使用 TLS,那么沿途的任何跃点都可能是邪恶的,并且如果他们愿意,就会修改请求/响应。要了解途中的许多跃点,您可以尝试 traceroute(尽管有些路由器会简单地丢弃使 traceroute 工具工作的数据包,因此这不是一个可靠的测量方法)。

    然而,在纯 CSRF 攻击的情况下,攻击者无法控制受害者的浏览器。这意味着受害者的浏览器将直接向 Web 服务器发出请求,并像往常一样发送正确的引用标头。这就是为什么无法更改受害者的引荐来源网址标头的原因,尽管引荐来源网址标头通常是糟糕的安全做法,因为它们很容易被欺骗。

    总而言之,对抗 CSRF 的最佳解决方案是使用 CSRF 令牌。 OWASP recommends using the origin header and a CSRF token.

    希望这会有所帮助。如果没有,请在 cmets 中告诉我,我会尽力澄清。

    【讨论】:

    • 在第 2 段中,如果站点在 HTTPS 上,您定义的通过代理修改引用标头的技术将不起作用?
    • 即使站点使用 HTTPS,也可以这样做。您的浏览器只会向您显示证书警告,因为默认情况下您的浏览器不信任 Burp 的证书。无论如何,它仍然可以工作。如果您手动将 Burp 的证书设置为受信任的证书,则警告可能会被删除
    猜你喜欢
    • 2013-06-21
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 2013-05-03
    相关资源
    最近更新 更多