【问题标题】:How do you spoof HTTP_REFERER?你如何欺骗 HTTP_REFERER?
【发布时间】:2010-10-11 15:30:06
【问题描述】:

我需要尝试欺骗通过我的另一个页面的 HTTP_REFERER,以便在目标页面中,我可以确定请求来自“正确”页面并执行适当的逻辑。

  1. 如何在 JavaScript (AJAX) 中做到这一点?
  2. 我可以在 ASP.Net 中这样做吗?

TIA 公羊

【问题讨论】:

    标签: http-referer spoofing


    【解决方案1】:

    一般来说,您不能在没有漏洞利用、插件或其他扩展的情况下导致其他浏览器返回错误的 HTTP_REFERER。如果您想修改从 Web 浏览器发送的值并且您使用的是 FireFox,请查看 Modify Headers 扩展名。

    在任何情况下,您都不应依赖 HTTP_REFERER 的准确性。无法保证您收到的 HTTP_REFERER 不是伪造的或根本没有发送。

    【讨论】:

    • 如果您使用的是 Chrome ModHeader 扩展程序,请执行此操作!
    【解决方案2】:

    如果您想在目标页面测试请求是否来自“正确”页面,则无需欺骗引荐来源网址。您需要做的就是从不同的页面发出请求。在与您认为“正确”的 URL 不同的 URL 上设置一个页面,并从那里发出请求,方法是单击目标页面的链接或放置来自目标的图像。

    【讨论】:

    • 调用页面来自我无权访问的客户应用程序。因此,我需要“欺骗”引荐来源并测试我的页面,而不是在黑暗中编码。
    • @Rob,你为什么告诉他“你不需要欺骗推荐人”?这似乎无关紧要,因为他在问 如何 可以欺骗引荐来源。
    • @Pacerier,他在问“我如何通过做 Y 来解决问题 X?”我的回答是,他并不真的需要做Y来解决X。在这种情况下,X是为了测试页面是否可以检测到referrer; Y 是为了欺骗referrer。
    【解决方案3】:

    已经提到你不能真正欺骗事物。但需要澄清的是,HTTP_REFERER 标头由浏览器生成,因此在服务器端您无法控制它(包括传递 javascript 的东西,可能启用也可能不启用)。

    如果您只是想测试您的页面对某些标头(例如“Referer:”)的响应,您可以使用诸如curlwget 之类的命令行工具,这些工具在大多数 BSD 和 Linux 变体中都可用(包括 OS/X)。如果您使用的是 MS Windows,则可以使用 Cygwin 获取 curl 或 wget。

        wget -O - --referer="http://example.com/some/path" http://example.com/
    

        curl -e "http://example.com/some/path" http://example.com/
    

    但我认为,您这样做的核心原因显然是为了“保护”一个页面。如果您真的想确保仅在首先访问其他页面(“A”)之后才访问页面(称为“B”),那么您需要在服务器端进行更复杂的逻辑。

    如果您要存储会话 cookie,那么您可以在页面“A”上嵌入一些设置布尔变量的逻辑。然后在页面“B”上添加逻辑,检查以确保变量已设置。

    我将把它作为练习留给读者了解如何在 ASP.NET 中执行此操作。 (因为我是 PHP 程序员。;-])

    【讨论】:

    • 为什么说引荐检查不能保证“页面B只有在页面A被访问后才运行逻辑”?
    • 我不是这么说的。如果您使用 cookie,那么您可以确保 cookie 是通过访问页面 A 设置的,然后 B 可以检查该 cookie。 HTTP_REFERER 是浏览器生成的,所以不可信。
    猜你喜欢
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多