篡改referer_HTTP_REFERER的用法及伪造
引言
在php中,可以使用$_SERVER[‘HTTP_REFERER’]来获取HTTP_REFERER信息,关于HTTP_REFERER,php文档中的描述如下:
“引导用户代理到当前页的前一页的地址(如果存在)。由 user agent 设置决定。并不是所有的用户代理都会设置该项,有的还提供了修改
HTTP_REFERER 的功能。简言之,该值并不可信。 ”
在百度百科中,对于该参数的描述如下:
“HTTP
Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器籍此可以获得一些信息用于处理。”
从上面的论述中我们可以得到如下几点结论:
http_referer由浏览器生成,并不是所有浏览器都会设置该值。
http_referer可以伪造,并不可信。
HTTP_REFERER的用途
HTTP_REFERER提供了引导用户代理到当前页的前一页的地址信息,常见的一些应用场景有防盗链,统计文章有多少次是来自谷歌搜索结果,多少次来自百度搜索结果等。
下面以防盗链为例,讲讲HTTP_REFERER的用法。
如果你经常写博客,就一定会遇到盗用你辛辛苦苦整理过的文章不跟你打任何招呼甚至连原文链接都一并抹除的网站,文字这个层面我们没法控制,但是图片这个层面我们是可以控制的。举个例子,如果你也曾复制过一些类似腾讯等网站的文章,你会发现黏贴下来发表之后经常出现图片无法显示,这是如何做到的呢?
场景:a站点的图片全部存储在c站点(云服务器)上,c站点将识别调用方是否来自a站点,否则显示一张错误图片,b站是盗图网站。
a站和b站的代码一致,如下所示:
;
重点是c站的代码,如下所示:
if(file_exists($_GET['fname'])){echo file_get_contents($_GET['fname']);
}
}
这样当a站访问时图片可以正常显示,而b站访问时图片是显示不出来的。
什么时候获取不到HTTP_REFERER值
综上所述,HTTP_REFERER存在需要两个条件:
浏览器(客户端)请求(服务器端请求的情况下,是不存在HTTP_REFERER的,但是可以伪造header,这在下一节中将提及);
存在前导页;
以下是网友收集的获取不到HTTP_REFERER值的情况:
在浏览器内直接敲URL
windows桌面上的超链接图标
浏览器内书签
第三方软件(如Word,Excel等)内容中的链接
SSL认证网站跳入
http://example.com/“> meta页面设置自动跳转时,在example.com将取不到REFERER URL
使用JavaScript的Location.href或者是Location.replace()
在以下情况下可以获取HTTP_REFERER值:
直接用
form提交的表单(POST或GET)
src请求(如js的script标签及html中img标签的src属性)
如何伪造HTTP_REFERER
前面提到HTTP_REFERER是可以伪造的,那么在php中,如何伪造HTTP_REFERER呢?有如下三种方法:
首先是接口代码:
<?php $HTTP_REFERER = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';exit(json_encode(array('status' => 'ok',
'refer' => $HTTP_REFERER)
));
curl
代码示例:
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_REFERER, 'http://www.google.com');$output = curl_exec($ch);
curl_close($ch);return $output;
}var_dump(curl_post("http://www.c.com/api.php"));
执行结果如下:
伪造成功。
file_get_contents
一直没怎么用过file_get_contents来发送post请求,其实file_get_contents可以发送任何http请求,后期会针对性的整理一篇文章出来。
代码示例:
$opts = array('http'=>array('method'=>"GET",
'header'=>"Referer: http://www.google.com")
);$context = stream_context_create($opts);//Open the file using the HTTP headers set above
var_dump(file_get_contents('http://www.c.com/api.php', false, $context));
执行结果:
伪造成功
socket
代码示例:
$fp = fsockopen("www.c.com", 80, $errno, $errstr, 30);if (!$fp) {echo "$errstr ($errno)
\n";
}else{$out = "GET /api.php HTTP/1.1\r\n";$out .= "Host: www.c.com\r\n";$out .= "Referer: www.google.com\r\n";$out .= "Connection: Close\r\n\r\n";fwrite($fp, $out);while (!feof($fp)) {echo fgets($fp, 128);
}fclose($fp);
}
执行结果:
伪造成功。
在做这次测试的时候,第一次执行报错:Your browser sent a request that this server could not understand.
后来发现是$out = “GET api.php HTTP/1.1\r\n”;中少了’/’,纠结了老半天,晕死
---------------------
原文:https://blog.csdn.net/u011250882/article/details/49679535
篡改referer_HTTP_REFERER的用法及伪造相关推荐
- 篡改referer_HTTP协议头部REFERER用法及伪造
1>Refere定义 Referer是HTTP请求header 的一部分,当浏览器(或者模拟浏览器行为)向web 服务器发送请求的时候,头信息里有包含Referer .比如我在www.xxxx. ...
- HTTP_REFERER的用法及伪造及去掉REFERER方法
HTTP_REFERER的用途 HTTP_REFERER提供了引导用户代理到当前页的前一页的地址信息,常见的一些应用场景有防盗链,统计文章有多少次是来自谷歌搜索结果,多少次来自百度搜索结果等. 下面 ...
- 计算机论文学术不端,吉林大学计算机科学与技术学院 博士、硕士学位论文反学术不端行为暂行规定...
发表于2009-06-09 据教育部有关规定,学术不端行为大致分为七类:抄袭.剽窃.侵吞他人学术成果:篡改他人学术成果:伪造或者篡改数据.文献,捏造事实:伪造注释:未参加创作,在他人学术成果上署名;未 ...
- Go 语言编程 — net/http — 支持 HTTPS
目录 文章目录 目录 前文列表 单向认证 HTTPS 服务端 客户端 浏览器客户端 curl 客户端 Golang net/http 客户端 双向认证 前文列表 <互联网协议 - HTTP 超文 ...
- 【学术相关】建议收藏,到底哪些行为是学术不端?
最近论文事件频频上热搜, 大家对学术不端的讨论也颇多. 那到底什么算学术不端呢? 学姐把教育部文件给大家看一下, 避免小伙伴入坑,千万别踩雷. 01 针对对象 高等学校及其教学科研人员.管理人员和学生 ...
- 深大uooc学术道德与学术规范教育第一章
一.单选题 (共 20.00 分) 1. 与学术不端行为相比,学术失范的动机与情节( ) A. 较学术不端为轻 B. 较学术不端更重 C. 两者差不多 D. 两者无法比较 满分:10.00 分 得分: ...
- 也谈分布式系统中的网络模型和故障模型
文章目录 1. 写在前面 2. 再理解网络模型 2.1 一个疑问 3. 故障模型的划分 3.1 一个疑问 3.2 按照故障发生的领域分类(Domain of failure occurrence) 3 ...
- 区块链教程(2)——P2P交易原理
区块链教程(2)--P2P交易原理 参考:廖雪峰的官方网站区块链教程 https://www.liaoxuefeng.com/wiki/1207298049439968 文章目录 区块链教程(2)-- ...
- Internet安全协议 学习笔记
文章目录 第一部分 安全协议基础 第一章 概述 1.1 Internet协议与安全需求 1.2 密码学回顾 1.3 逻辑学回顾 第二章 安全协议 基础概念 协议实例 第二部分 常见的安全协议 第三章 ...
最新文章
- 通过源码分析Android 的消息处理机制
- VBA 的编写与执行
- 20151024学习内容:安全相关
- Python多重继承时属性的调用顺序
- CF633H Fibonacci-ish II
- 齐聚静安,共襄盛举--「2020上海静安国际大数据论坛」成功举行
- win10蓝牙android上网,Win10系统如何共享安卓手机蓝牙上网(非热点)
- 注册github一直显示验证码错误的问题
- 如何才能骗过面部识别系统?
- JS拉起支付宝,并加好友
- 宏定义(无参,有参,宏函数)(详细介绍)
- 逆向分析并修改Hello World程序《逆向工程核心原理》《软件逆向工程原理与实践》
- 双路服务器单路运行,双路服务器和单路服务器有什么区别?
- Azure Active Directory Powershell命令创建一个application以及App需要的权限
- 时间控件-时分秒/分秒/年月日
- 嵌入式实时操作系统RTX5快速入门 (完结)
- 2017三月c语言,2017年3月计算机c语言二级考试真题
- java安装及运行环境配置
- 英特佩斯总线采集测试仿真工具
- 【python爬虫逆向】某电子商务平台cookie值acw_sc__v2生成逻辑
热门文章
- 无需部署即可测试JPQL / HQL
- 为什么在Java 6上Math.round(0.499999999999999917)舍入为1
- php主机安装v2,RackTables 安装教程Installation GuideV2
- python asyncio future_Python asyncio.isfuture方法代码示例
- python中的深拷贝_Python中的深拷贝和浅拷贝
- matlab表达式,表达式
- MATLAB Simulink
- MathWorks 中国
- js mztreeview 双击事件_Mac下的Node.js安装教程
- String大小转换函数
- C语言编写简单朗读发音小工具!!
- php管理智能dns,负载均衡之DNS轮询