HTTP协议头部REFERER用法及伪造

1》Refere定义 

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

2>Refere做用

  1.防盗链html

    那么能够利用这个来防止盗链了,好比我只容许我本身的网站访问我本身的图片服务器,那个人域名是www.xxx.com,那么图片服务器每次取到Referer来判断一下是否是我本身的域名www.xxxx.com,若是是就继续访问,不是就拦截。  web

  2.防止恶意请求。api

    好比个人网站上,静态请求是*.html结尾的,动态请求是*.shtml,那么由此能够这么用,全部的*.shtml请求,必须 Referer  为我本身的网站。浏览器

    3.空Referer是怎么回事?什么状况下会出现Referer?服务器

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

    那么何时 HTTP  请求会不包含 Referer  字段呢?根据Referer的定义,它的做用是指示一个请求是从哪里连接过来,那么当一个请求并非由连接触发产生的,那么天然也就不须要指定这个请求的连接来源。post

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

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

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

3>Refere可靠吗?

  Refere不可靠,但有部分做用,起码增长了爬图难度和成本,由于在浏览器端你是没法指定(伪造),你只能经过定义meta元素告诉浏览器怎么用

<meta name="referrer" content="never">

  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));
相关文章
相关标签/搜索