我正在尝试使用引荐来源标题检查作为深度防御(即,许多安全技术之一,而注意仅依赖于任何一个)。
似乎有时 MSIE 在刷新时不包括引用者。这是预期的行为吗?无论如何我可以检测到刷新,所以我知道缺少推荐人是可以的吗?
是的,我知道引荐来源网址可以被自定义浏览器欺骗。只是说,如果黑客确实想入侵我的小网站,他将需要投入时间来设置合适的引荐来源网址。
我正在尝试使用引荐来源标题检查作为深度防御(即,许多安全技术之一,而注意仅依赖于任何一个)。
似乎有时 MSIE 在刷新时不包括引用者。这是预期的行为吗?无论如何我可以检测到刷新,所以我知道缺少推荐人是可以的吗?
是的,我知道引荐来源网址可以被自定义浏览器欺骗。只是说,如果黑客确实想入侵我的小网站,他将需要投入时间来设置合适的引荐来源网址。
鉴于rfc2616没有精确指定“重新加载”时会发生什么(它只提到引用者:如果 URI 是从没有自己的 URI 的源获得的,则不得发送),可能会有一些变化。
但是,鉴于您在“安全”上下文中进行交谈,我想知道您是否期望引用者:从 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.
我不会相信推荐人:从安全的角度来看。首先,因为标准本身提到这应该是可调整的(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 中,例如在此处记录。
如果一个人想发送任意的referer header,那么“更多的工作”只是下载和启动curl的问题,可以选择将referer设置为他们喜欢的任何东西。(--referer <URL>)。因此,尝试在任何类型的安全处理中使用它都是一个弱点子。
刷新页面通常会调用浏览器重新发送用于获取当前页面的请求。(这也是询问您是否要重新发送 POST 请求的原因。)因此,只有在前一个请求也已经包含Referer 时才会发送Referer。
没有在书签点击或用户输入 URL 时设置推荐人。
在我看来,这也适用于刷新,因为否则看起来您会从单个链接获得大量传入流量,即使用户只是单击了一次链接然后多次按 F5。
不过只是我的看法。这是一个不可靠的指标,它主要取决于单个浏览器客户端的行为,并且通常可以自定义启动。
请注意,如果您通过 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();
大多数浏览器会重新发送原始请求。这意味着如果原始请求具有引用者,则将包含引用者。