HTTP协议头部REFERER用法及伪造

摘要:
1》Refere定义 Referer是HTTP请求header的一部分,当浏览器向web服务器发送请求的时候,头信息里有包含Referer。什么情况下会出现Referer?首先,我们对空Referer的定义为,Referer头部的内容为空,或者,一个HTTP请求中根本不包含Referer头部。比如,直接在浏览器的地址栏中输入一个资源的URL地址,那么这种请求是不会包含Referer字段的,因为这是一个“凭空产生”的HTTP请求,并不是从一个地方链接过去的。允许Referer为空,意味着你允许比如浏览器直接访问,就是空。

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元素告诉浏览器怎么用

<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));

免责声明:文章转载自《HTTP协议头部REFERER用法及伪造》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ThinkPHP3快速入门教程三:查询语言DevOps专题|Lua引擎打造超轻量级客户端下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

关于HTTP协议,一篇就够了

HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。 HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。 HTTP是一个属于应用层的面向对象的协议,由于其简捷...

http协议多线程文件传输

      HTTP亦即Hpyer Text Transfer Protocal的缩写,它是现代互联网上最重要的一种网络协议,超文本传输协议位于TCP/IP协议的应用层,是一个面向无连接、简单、快速的C/S结构的协议。HTTP的工作过程大体上分连接、请求、响应和断开连接四个步骤。C#语言对HTTP协议提供了良好的支持,在.NET类库中提供了WebReque...

HTTP协议中GET请求方法中的请求头内容 : If-Modified-Since

问题背景 HTTP协议中GET请求方法中的请求头内容 : If-Modified-Since 具体描述 HTTP请求头的IMS(If-Modified-Since):浏览器缓存记录的该文件的最后服务器修改时间。 浏览器发送HTTP请求时,把If-Modified-Since一起发到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行比较。 如...

RTMP、RTSP、HTTP视频协议详解(转)

一、RTMP、RTSP、HTTP协议 这三个协议都属于互联网 TCP/IP 五层体系结构中应用层的协议。理论上这三种都可以用来做视频直播或点播。但通常来说,直播一般用 RTMP、RTSP。而点播用 HTTP。下面分别介绍下三者的特点。   1,RTMP协议 (1)是流媒体协议。 (2)RTMP协议是 Adobe 的私有协议,未完全公开。 (3)RTMP协议...

HTML 之 HTTP 协议(请求协议以及响应协议)

一、HTTP 协议 HTTP(hypertext transport protocol),即超文本传输协议。这个协议详细规定了浏览器和万维网服务器之间互相通信的规则。 HTTP就是一个通信规则,通信规则规定了客户端发送给服务器的内容格式,也规定了服务器发送给客户端的内容格式。其实我们要学习的就是这个两个格式! 客户端发送给服务器的格式叫“请求协议”;服务器...

HTTP 协议中 GET 和 POST 方法详解

GET请求报文分析 1、请求行 请求方法 GET(描述该请求采用了什么请求方法),HTTP 1.0 和 1.1 协议中共包含10种请求方法。不过 HTTP 1.1 中只有8种方法。 URI 请求WEB服务器的资源名称。 URI:统一资源标识符(代表这个资源的名称),如:上图中的 /PrjTheHttpProtocol/test?username=admi...