http 请求头 Referer 字段的一点研究

/ 0评 / 0

之前对这个字段只有个模糊的认识,这两天集中实验了一下,一些概念也比较清楚了,记录一下。

首先,这个字段表明的是,当前请求来自何处。比如说如果从百度搜索的结果中,点击了到了新网页,这时的请求就会加上Referer字段,表明是从百度跳转来的。

但是这个字段有点古怪,而且并不是每一次跳转都会加上这个字段,另外这个字段是可以伪造的,所以不能尽信。

特性

根据实验,得出两个有趣的现象:
- 通过http状态码来跳转(重定向),不会有此字段。
也就说,访问A页面,然而A页面返回302/301,Location:让你去B页面,这时候在B页面上,是不知道你从A页面来的。
- 通过 JS 跳转会加上这个字段。在控制台中实验:window.location.href = '新页面地址' ,这是的跳转中会有此字段。

也就说,如果想让你的重定向有Referer字段,最好是通过js来跳转,输出一段js脚本,修改window.locaion.href, 等浏览器执行此代码时帮你跳转。

另一个值得关注的现象:通过图片、js脚本去加载的资源,请求中也会带上Referer参数,表明是从哪个站点请求的。

比如很多网站都会使用第三方统计服务,需要加载第三方js,此时会将Referer信息也加载头部,对方是能知道这个请求来自哪个站点(如果对方想的话)。

作用

并不可靠

前面说到这个字段并不可靠,主要是这个字段是可以伪造的!(当然还有其他字段可以伪造,比如User-Agent)

比如你在后端发请求时,就可以像修改User-Agent一样轻易修改这个字段,以期骗过服务器的某些策略,或者制造某种假象。

比如在使用第三方统计服务时,有时候就发现来源网站这一栏中,有奇怪的网站,从未听过,更不可能在这类网站有外链,通常还有有些信息:SEO联系QQxxx之类的,无非就是广告。大概也是用的修改Referer的办法来做到的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注