【问题标题】:Remove http referer删除 http 引用
【发布时间】:2011-10-12 15:42:22
【问题描述】:

是否可以在请求标头中删除或隐藏 http referer 信息? 我想使用可能在 javascript python 或 django 中的脚本从我的站点中删除访问其他站点的用户的 http 引荐来源信息

示例:

Host    slogout.espncricinfo.com
User-Agent  Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0    
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8    
Accept-Language en-us,en;q=0.5    
Accept-Encoding gzip, deflate    
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7    
Connection  keep-alive
Referer http://slogout.espncricinfo.com/index.php?page=index&level=login

【问题讨论】:

  • 来自您的脚本?网站?在您的计算机上浏览时?
  • 什么意思?如何以编程方式进行?或在自定义网络浏览器中?如果首先,您需要哪个平台的解决方案(例如 php、c++ 等...)?
  • @cularis 我想删除从我的网站转到另一个网站的访问者的 http 推荐人信息...
  • @heximal 我想以编程方式使用这些语言中的任何一种 javascript、jquery、python django 或 html

标签: http http-headers referrer-policy


【解决方案1】:

你不能。浏览器决定是否发送推荐人。您可以使用link anonymizer 隐藏您的推荐人。

【讨论】:

    【解决方案2】:

    有多种机制可以做到这一点,具体取决于您使用的浏览器版本。对于任何浏览器,如果目标是通过 HTTP,您可以通过重定向到 HTTPS 页面来“清洗”源,然后导航到目标页面。

    对于 IE,您可以使用 JavaScript(例如 window.open)执行导航,这将抑制引用。或者您可以使用 META Refresh,但要付出一定的代价。对于基于 WebKit 的浏览器,请参阅 NoReferrer LINK REL 选项:http://www.webkit.org/blog/907/webkit-nightlies-support-html5-noreferrer-link-relation/

    【讨论】:

      【解决方案3】:

      您假设通过 javascript 访问 Referer 标头是不可能的。就像 http 中的 User-Agent 标头一样,javascript 无法访问referer 等。这些标头的值由浏览器提供。如果需要,您可以做一些棘手的工作。

      【讨论】:

        【解决方案4】:

        在 Javascript 中有一个跨浏览器解决方案,它使用动态创建的 Iframes,检查 proof of concept(免责声明:它使用了我为此目的编写的一个小 JS 库)。

        【讨论】:

        【解决方案5】:

        如果您只对隐藏完整 URL 感兴趣并且不介意公开您的域名,那么这个小的 Javascript 代码就可以完成这项工作。

        您的用户位于example.com/secret_url_we_want_to_hide,您的用户单击了一个链接,该链接应该将他们发送到google.com。但是我们用这个代替<a href="http://google.com">Go to Google</a>

        a href="http://example.com/redirect.html#http://google.com">Go to Google</a>

        其中/redirect.html 是一个包含以下内容的 HTML 页面: (编辑:请查看更新!)

        <html><head></head><script>
        window.location.replace(location.hash.substring(1));
        </script></html>
        

        Google.com 将在引荐来源标签中看到 http://example.com/redirect.html,而永远不会看到实际的 example.com/secret_url_we_want_to_hide

        更新:

        Firefox 有一个带有 location.hash 的bug,解决方法如下:

        <html><head></head><script>
        workaround_hash=location.href.split('#').splice(1).join('#');
        window.location.replace(workaround_hash);
        </script></html>
        

        【讨论】:

        • 这是一个很好的解决方案,但它只适用于浏览器。任何忽略 Javascript(如 cUrl 或其他非浏览器 http 客户端)的东西都不会重定向
        【解决方案6】:

        我一直在寻找类似的解决方案,将引荐来源设为空白,但仅计算来自引荐网站的唯一访问次数。我遇到的问题是,如果有人从特定链接访问我的网站,访问计数器会上升,但如果该人刷新页面,访问计数器仍然会上升。

        我使用 google 访问了有关此主题的多个资源,是的,在有人指出我查看 php.net 以寻求解决方案之前,很难找到答案。

        我在使用中找到了解决方案

        header('Refresh: 0; url=index.php');
        

        但只是上面的代码不是解决方案。解决方案在于它的位置。完整代码如下:

        $ref=@$_SERVER[HTTP_REFERER];
        $domain = parse_url($ref, PHP_URL_HOST);
        
        If ($domain === "google.com") 
            {
                header('Refresh: 0; url=index.php'); //Resets header info to host site so that on page refresh, the hit counter does not
            }                                        // increase but increases only when someone visits from google url again
        

        “刷新”后,头部信息变为主机站点的头部信息,因此页面刷新时“if”语句将不生效,并且命中计数器不会增加。

        您可以将命中计数器放在 IF 块内。您还可以编写不同的参数来记录对您网站的空白点击,也可以编写不同的参数来记录所有页面加载/浏览量。

        希望对你有帮助.....

        【讨论】:

          【解决方案7】:

          从 2015 年开始,您可以通过以下方式阻止发送 Referer 标头:

          只需将其添加到网页的头部:

           <meta name="referrer" content="no-referrer" />
          

          适用于链接和页面上的 JavaScript 代码发出的 Ajax 请求

          其他有效的meta 选项包括:

          <meta name="referrer" content="unsafe-url" />
          <meta name="referrer" content="origin" />
          <meta name="referrer" content="no-referrer-when-downgrade" />
          <meta name="referrer" content="origin-when-cross-origin" />
          

          • 在此处查看它是否适用于您的浏览器:http://caniuse.com/#feat=referrer-policy

          • 在此处查看规格:http://w3c.github.io/webappsec/specs/referrer-policy/

          另请注意,浏览器现在发送 Origin 标头(带有 CORS 请求和 POST 请求,请参见此处:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin),其中包括域和端口,据我所知,无法删除。如果你使用&lt;meta name="referrer" content="origin" /&gt;,那么referrer 将包含与Origin 标头类似的信息,这从隐私的角度来看已经很好,因为它会隐藏用户所在的确切页面。

          更新:

          如果您只想通过使用 JavaScript 来删除引荐来源网址,您可以在发出 Ajax 请求之前动态添加适当的元标记。此 JavaScript 会将 &lt;meta name="referrer" content="no-referrer" /&gt; 添加到网页的 head 部分:

          var meta = document.createElement('meta');
          meta.name = "referrer";
          meta.content = "no-referrer";
          document.getElementsByTagName('head')[0].appendChild(meta);
          

          【讨论】:

          • 如 caniuse.com 所述,这不适用于 IE、某些移动浏览器,并且 MS Edge 有部分支持。因此,这不足以使 URL 中的敏感信息远离第三方。
          • 根据文档w3.org/TR/referrer-policy ,没有提到“无推荐人”。应该是:
          • 在您的链接 w3c.github.io/webappsec-referrer-policy 中,它明确表示:“......仅供讨论......此处发布并不意味着 W3C 认可其内容。请勿在其他地方引用此文件而不是正在进行中的工作”
          • 罗普,感谢您指出这一点。我相信content=nevercontent=none 更兼容,因为较新的规范说"never" or "no-referrer", return "no-referrer".。虽然它也说Authors are encouraged to avoid the legacy keywords never, default, and always. The keywords no-referrer, no-referrer-when-downgrade, and unsafe-url respectively are preferred..
          • 值得注意的是,content=no-referrer 不适用于所有浏览器,而 content=never 似乎适用于所有支持 no-referrer 的浏览器,然后还有一些。现在你可能应该使用content=never
          【解决方案8】:

          我也在寻找解决方案,幸运的是找到了这个Hide My Referrer 网站。让我印象深刻的是它甚至适用于 https > https 请求。

          它将生成一个您可以使用的链接,该链接完全符合您的要求。

          【讨论】:

          • WTF!?!这会将Referer暴露给一些不可信的第三方(hidemyreferrer.com),因此它不能解决任何问题,并且可能会使事情变得更糟。做这种不正常的事情甚至有一个共同的名字:floriani principle
          • @Tino - 显然你不知道隐藏我的推荐网站是如何工作的。它可以正常工作并且使用起来完全安全。
          【解决方案9】:

          还有一种方法是使用history.replace() method隐藏查询字符串,如要将http://example.com/search?q=100替换为http://example.com/search,可以这样:

          history.replace(null,null,'search')
          

          希望这会有所帮助! :D

          【讨论】:

            【解决方案10】:
            <meta name="referrer" content="no-referrer"/>
            

            如果您将上述代码放在您的页面上,所有传出链接(用户点击)都不会发送推荐人信息

            Documentation

            【讨论】:

            • 如果您在发布的原始代码中添加一些解释,您的答案会更好...
            • @DaFois 更新
            【解决方案11】:

            我没有看到任何答案提到还有一个设置策略的 HTTP 响应标头 Referrer-Policy。以下是如何在 Apache 中设置它:

            Header add Referrer-Policy "no-referrer"
            

            或者,在访问仅指向同一站点的链接时,发送引荐来源网址的选择可能较弱但仍然安全:

            Header add Referrer-Policy "same-origin"
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2017-09-30
              • 1970-01-01
              • 1970-01-01
              • 2012-04-08
              • 1970-01-01
              • 1970-01-01
              • 2018-01-04
              相关资源
              最近更新 更多