【问题标题】:Is HTTP_REFERER supposed to be filled in when user tells a browser to "refresh"?当用户告诉浏览器“刷新”时,是否应该填写 HTTP_REFERER?
【发布时间】:2009-08-11 19:18:27
【问题描述】:

我正在尝试使用引荐来源网址检查作为深度防御(即,许多安全技术之一,而注意仅依赖于任何一个)。

似乎 MSIE 有时在刷新时不包含引荐来源网址。这是预期的行为吗?无论如何我可以检测到刷新,所以我知道缺少推荐人是可以的吗?

是的,我知道引荐来源网址可能会被自定义浏览器欺骗。只是说,如果黑客确实想入侵我的小网站,他将需要投入时间来设置合适的引荐来源网址。

【问题讨论】:

  • 你想知道页面是在客户端还是服务器端刷新的?
  • @Freddy,客户端刷新。当您使用 MSIE 右键单击​​任何页面时,我正在考虑您在上下文菜单中看到的“刷新”。
  • 偏执狂的人倾向于在浏览器中关闭引荐来源网址(在 Opera 中很容易做到,在 FireFox 中也很可能)。我真的不明白依靠它来获得任何形式的安全性有什么意义,即使它只是众多措施之一。
  • @Dan:我认为 Firefox 没有内置这种能力,但有一个插件(可能不止一个)可以做到。

标签: asp.net internet-explorer referrer


【解决方案1】:

鉴于rfc2616 没有准确指定“重新加载”时会发生什么(它只提到引用者:如果 URI 是从没有自己的 URI 的源获得的,则不得发送),可能会有一些可变性。

但是,鉴于您在“安全”上下文中进行讨论,我想知道您是否期望Referer:从 HTTPS 访问页面转到 HTTP 访问页面并点击重新加载时,第 15.1.3 节有特别提到这一点:

Clients SHOULD NOT include a Referer header field in a (non-secure)
HTTP request if the referring page was transferred with a secure
protocol.

我不会信任Referer:从安全的角度来看。首先,因为标准本身提到这应该是可调整的(rfc2616,第 151 页):

The information sent in the From field might conflict with the user's
privacy interests or their site's security policy, and hence it
SHOULD NOT be transmitted without the user being able to disable,
enable, and modify the contents of the field. The user MUST be able
to set the contents of this field within a user preference or
application defaults configuration.

其次,从实用的角度来看,修补此字段的控件,例如对于 Firefox,在 about:config、network.http.sendRefererHeader 中,有文档记录,例如在here。

如果想要发送任意的referer 标头,那么“更多工作”只是下载并启动curl 并选择将referer 设置为他们喜欢的任何内容。 (--referer )。因此,尝试在任何类型的安全处理中使用它都是一个弱点子。

【讨论】:

  • “更多工作”实际上在 IE 之外的其他浏览器中并没有更多工作。哎呀,IE 可能在 7 或 8 中具有该选项......我从未真正使用过它们超过一两分钟。
  • 我也不是——这就是为什么我给出了 curl 的例子(除了微不足道的“Referer:”还可以忘记处理 cookie 的无聊细节)。
  • 我办公室的政策是,我们从来没有遇到过我们不喜欢的安全功能,即使它不是水密的,就像锁住房子的门一样愚蠢把一块砖扔进玻璃窗是那么容易——但人们仍然会锁门。
  • 谢谢 :) 不过,有问题的门只是一个全息图。 :)
【解决方案2】:

刷新页面通常会调用浏览器重新发送用于获取当前页面的请求。 (这也是为什么会询问您是否要重新发送 POST 请求的原因。)因此,只有在前一个请求也已经包含Referer 时才会发送Referer。

【讨论】:

    【解决方案3】:

    在书签点击或用户输入 URL 时未设置引荐来源。

    在我看来,这也适用于刷新,因为否则看起来您会从单个链接获得大量传入流量,即使用户只是单击该链接一次然后按 F5 多次次。

    只是我的意见。这是一个非常不可靠的指标,它主要取决于单个浏览器客户端的行为,并且通常可以自定义启动。

    【讨论】:

      【解决方案4】:

      请注意,如果您通过 JavaScript 导航到链接,MSIE 将不会发送引荐来源网址,这是一个已知错误(自 IE6 开发以来没有看到任何更新)

      //e.g. this will not send the referer in IE
      location.href = 'somepage.html';
      
      //and I believe it also affects
      location.reload();
      

      【讨论】:

        【解决方案5】:

        大多数浏览器会重新发送原始请求。这意味着如果原始请求具有引用者,则将包含引用者。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-02-18
          • 2010-10-02
          • 1970-01-01
          • 1970-01-01
          • 2015-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多