PHP伪造来源HTTP_REFERER的方法实例详解


Posted in PHP onJuly 06, 2015

本文实例讲述了PHP伪造来源HTTP_REFERER的方法。分享给大家供大家参考。具体分析如下:

如今网络上十分流行论坛自动发帖机,自动顶贴机等,给众多论坛网站带来了大量的垃圾信息,许多网站只是简单地采用了判断HTTP_REFERER的值来进行过滤机器发帖,可是网页的HTTP_REFERER来路信息是可以被伪造的。任何事物都是双面刃,只要你善于利用就有其存在价值。

很早以前,下载软件如Flashget,迅雷等都可以伪造来路信息了,而这些软件的伪造HTTP_REFERER大多是基于底层的sock来构造虚假的http头信息来达到目的。本文就纯粹从技术角度讨论一下,php语言下的伪造HTTP_REFERER的方法,以期让大家了解过程,更好的防御。

环境:Apache/2.2.8 + PHP/5.2.5 + Windows XP系统,本地测试。
首先,在网站虚拟根目录下建立1.php和2.php两个文件。
其中,1.php文件内容如下:

<?php
$host = '127.0.0.1';
$target = '/2.php';
$referer = 'https://3water.com'; //伪造HTTP_REFERER地址
$fp = fsockopen($host, 80, $errno, $errstr, 30);
if (!$fp){
echo "$errstr($errno)<br />\n";
} 
else{
$out = "
GET $target HTTP/1.1
Host: $host
Referer: $referer
Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)){
echo fgets($fp, 1024);
}
fclose($fp);
}
?>

另一个2.php文件很简单,只是写上一行读取当前的HTTP_REFERER服务器值的代码即可,如下:

<?php
echo "<hr />";
echo $_SERVER["HTTP_REFERER"];
?>

执行1.php文件,打开http://localhost/1.php,页面返回信息如下:

HTTP/1.1 200 OK Date: Fri, 04 Apr 2008 16:07:54 GMT Server: Apache/2.2.8 (Win32) PHP/5.2.5 X-Powered-By: PHP/5.2.5 Content-Length: 27 Connection: close Content-Type: text/html; charset=gb2312

看到了结果了吧,伪造来源HTTP_REFERER信息成功。所以,如果你的网站仅仅是判断HTTP_REFERER,并不是安全的,别人一样可以构造这样的来源,简单的防御方法就是验证页里加上验证码;还可以结合IP判断的方法。

补充:ASP下的伪造来源的代码如下:

<%
dim http 
set http=server.createobject("MSXML2.XMLHTTP") '//MSXML2.serverXMLHTTP也可以
Http.open "GET",url,false 
Http.setRequestHeader "Referer","https://3water.com/" 
Http.send()
%>

如果你是一个有心人,请不要恶意利用这些方法,毕竟坏事做多了的话,效果就过犹不及了;比如你发大量的垃圾帖子吧,可能短期内会给你带来大量的外部链接,但这样的黑帽手段迟早要被搜索引擎发现,而这些已经发出去的链接就好像泼出去的水一样收不回来,这样的罪证就不是你能控制的了。

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
PHP获取类中常量,属性,及方法列表的方法
Apr 09 PHP
php若干单维数组遍历方法的比较
Sep 20 PHP
PHP中设置时区,记录日志文件的实现代码
Jan 07 PHP
基于PHP输出缓存(output_buffering)的深入理解
Jun 13 PHP
php操作xml入门之xml基本介绍及xml标签元素
Jan 23 PHP
WordPress中创建用户角色的相关PHP函数使用详解
Dec 25 PHP
PHP发送AT指令实例代码
May 26 PHP
php图像处理函数imagecopyresampled用法详解
Dec 02 PHP
PHP中Laravel 关联查询返回错误id的解决方法
Apr 01 PHP
解析 thinkphp 框架中的部分方法
May 07 PHP
PHP多种序列化/反序列化的方法详解
Jun 23 PHP
PHP中一个有趣的preg_replace函数详解
Aug 15 PHP
PHP 错误处理机制
Jul 06 #PHP
帝国cms常用标签汇总
Jul 06 #PHP
帝国CMS留言板回复后发送EMAIL通知客户
Jul 06 #PHP
帝国cms目录结构分享
Jul 06 #PHP
33道php常见面试题及答案
Jul 06 #PHP
PHP中创建和验证哈希的简单方法实探
Jul 06 #PHP
详解PHP中的PDO类
Jul 06 #PHP
You might like
在PHP中使用Sockets 从Usenet中获取文件
2008/01/10 PHP
PHP中的Streams详细介绍
2014/11/12 PHP
php 无限级分类 获取顶级分类ID
2016/03/13 PHP
php微信公众号开发模式详解
2016/11/28 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
2019/09/03 PHP
JavaScript版代码高亮
2006/06/26 Javascript
prototype Element学习笔记(Element篇三)
2008/10/26 Javascript
基于jquery的finkyUI插件与Ajax实现页面数据加载功能
2010/12/03 Javascript
jquery利用event.which方法获取键盘输入值的代码
2011/10/09 Javascript
javascript 应用小技巧方法汇总
2015/07/05 Javascript
ajax如何实现页面局部跳转与结果返回
2015/08/24 Javascript
js 中获取制定的cook信息实现方法
2016/11/19 Javascript
JavaScript数据结构中栈的应用之表达式求值问题详解
2017/04/11 Javascript
微信小程序movable view移动图片和双指缩放实例代码
2017/08/08 Javascript
JS实现的DOM插入节点操作示例
2018/04/04 Javascript
layui点击按钮添加可编辑的一行方法
2018/08/15 Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
2018/11/11 Javascript
通过seajs实现JavaScript的模块开发及按模块加载
2019/06/06 Javascript
jquery实现有过渡效果的tab切换
2020/07/17 jQuery
vue 微信分享回调iOS和安卓回调出现错误的解决
2020/09/07 Javascript
[54:17]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第二场 1月10日
2021/03/11 DOTA
Python RabbitMQ消息队列实现rpc
2018/05/30 Python
python爱心表白 每天都是浪漫七夕!
2018/08/18 Python
Python3远程监控程序的实现方法
2019/07/15 Python
tensorflow如何批量读取图片
2019/08/29 Python
如何利用Python识别图片中的文字
2020/05/31 Python
美国在线家居装饰店:Belle&June
2018/10/24 全球购物
美国亚马逊旗下时尚女装网店:SHOPBOP(支持中文)
2020/10/17 全球购物
宿舍违规检讨书
2014/01/12 职场文书
行政人事经理职位说明书
2014/03/05 职场文书
小学社团活动总结
2014/06/27 职场文书
乡镇干部个人对照检查材料思想汇报(原创篇)
2014/09/28 职场文书
监察建议书
2015/02/04 职场文书
鼋头渚导游词
2015/02/05 职场文书
导游词之太湖
2019/10/08 职场文书
CSS link与@import的区别和用法解析
2023/05/07 HTML / CSS