HTTP协议头部REFERER用法

By | 2021-09-11

1>Refere定义
Referer是HTTP请求header 的一部分,当浏览器(或者模拟浏览器行为)向web 服务器发送请求的时候,头信息里有包含Referer 。比如我在www.xxxx.com 里有一个www.baidu.com 链接,那么点击这个www.baidu.com ,它的header 信息里就有:Referer=https://www.xxxx.com信息

2>Refere作用
1.防盗链

那么可以利用这个来防止盗链了,比如我只允许我自己的网站访问我自己的图片服务器,那我的域名是www.xxx.com,那么图片服务器每次取到Referer来判断一下是不是我自己的域名www.xxxx.com,如果是就继续访问,不是就拦截。

2.防止恶意请求。

比如我的网站上,静态请求是*.html结尾的,动态请求是*.shtml,那么由此可以这么用,所有的*.shtml请求,必须 Referer 为我自己的网站。

3.空Referer是怎么回事?什么情况下会出现Referer?

首先,我们对空 Referer 的定义为, Referer 头部的内容为空,或者,一个 HTTP 请求中根本不包含 Referer 头部。

那么什么时候 HTTP 请求会不包含 Referer 字段呢?根据Referer的定义,它的作用是指示一个请求是从哪里链接过来,那么当一个请求并不是由链接触发产生的,那么自然也就不需要指定这个请求的链接来源。

比如,直接在浏览器的地址栏中输入一个资源的URL地址,那么这种请求是不会包含 Referer 字段的,因为这是一个“凭空产生”的 HTTP 请求,并不是从一个地方链接过去的。

4.那么在防盗链设置中,允许空Referer和不允许空Referer有什么区别?

允许 Referer 为空,意味着你允许比如浏览器直接访问,就是空。

3>Refere可靠吗?
Refere不可靠,但有部分作用,起码增加了爬图难度和成本,因为在浏览器端你是无法指定(伪造),你只能通过定义meta元素告诉浏览器怎么用

1

content有如下值:

如果 referer-policy 的值为 never:删除 http head 中的 referer;
如果 referer-policy 的值为 default:如果当前页面使用的是 https 协议,而正要加载资源使用的是普通的 http 协议,则将 http header 中额 referer 置为空;
如果 referer-policy 的值 origin:只发送 origin 部分;
如果 referer-policy 的值为 always:不改变 http header 中的 referer 的值;
4>Refere伪造
只能在服务器端指定,Refere参数位置在$_SERVER[‘HTTP_REFERER’]

4.1>CURL方法

function curl_post($url){
     $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL, $url);
     curl_setopt($ch, CURLOPT_REFERER, 'http://www.baidu.com'); 
     $output = curl_exec($ch);
     curl_close($ch);
     return $output;
}

4.2>file_get_contents方法

$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Referer: http://www.baidu.com"
  )
);
$context = stream_context_create($opts);
var_dump(file_get_contents('http://www.c.com/api.php', false, $context));

 

发表回复

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