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 相关文章推荐
打造计数器DIY三步曲(中)
Oct 09 PHP
PHP中的日期处理方法集锦
Jan 02 PHP
PHP高自定义性安全验证码代码
Nov 27 PHP
php读取图片内容并输出到浏览器的实现代码
Aug 08 PHP
php模拟登陆的实现方法分析
Jan 09 PHP
DOM基础及php读取xml内容操作的方法
Jan 23 PHP
thinkPHP学习笔记之安装配置篇
Mar 05 PHP
PHP实现GIF图片验证码
Nov 04 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
Jan 24 PHP
PHP错误处理函数register_shutdown_function使用示例
Jul 03 PHP
PHP扩展Swoole实现实时异步任务队列示例
Apr 13 PHP
PHP变量的作用范围实例讲解
Dec 22 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 常用函数库和一些实用小技巧
2009/01/01 PHP
php一些错误处理的方法与技巧总结
2013/08/10 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
2013/09/16 PHP
php限制上传文件类型并保存上传文件的方法
2015/03/13 PHP
PHP实现网站访问量计数器
2017/10/27 PHP
PHP实现PDO操作mysql存储过程示例
2019/02/13 PHP
Javascript 页面模板化很多人没有使用过的方法
2012/06/05 Javascript
JS动态修改iframe高度和宽度的方法
2015/04/01 Javascript
JavaScript九九乘法口诀表的简单实现
2016/10/04 Javascript
基于jQuery插件jqzoom实现的图片放大镜效果示例
2017/01/23 Javascript
Bootstrap下拉菜单更改为悬停(hover)触发的方法
2017/05/24 Javascript
axios全局请求参数设置,请求及返回拦截器的方法
2018/03/05 Javascript
node 命令方式启动修改端口的方法
2018/05/12 Javascript
JS获取子节点、父节点和兄弟节点的方法实例总结
2018/07/06 Javascript
使用D3.js+Vue实现一个简单的柱形图
2018/08/05 Javascript
vue踩坑记-在项目中安装依赖模块npm install报错
2019/04/02 Javascript
Vue为什么要谨慎使用$attrs与$listeners
2020/08/27 Javascript
从源码角度来回答keep-alive组件的缓存原理
2021/01/18 Javascript
Python enumerate遍历数组示例应用
2008/09/06 Python
仅用500行Python代码实现一个英文解析器的教程
2015/04/02 Python
解决Mac安装scrapy失败的问题
2018/06/13 Python
Python判断一个三位数是否为水仙花数的示例
2018/11/13 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
2020/01/02 Python
在Matplotlib图中插入LaTex公式实例
2020/04/17 Python
Python tkinter之Bind(绑定事件)的使用示例
2021/02/05 Python
马来西亚最大的在线隐形眼镜商店:MrLens
2019/03/27 全球购物
RIP版本1跟版本2的区别
2013/12/30 面试题
Linux如何为某个操作添加别名
2015/02/05 面试题
关于圣诞节的广播稿
2014/01/26 职场文书
客服部班长工作责任制
2014/02/25 职场文书
欢迎领导检查标语
2014/06/27 职场文书
应用心理学专业求职信
2014/08/04 职场文书
2015年护士工作总结范文
2015/03/31 职场文书
2015年行政人事部工作总结
2015/05/13 职场文书
事业单位岗位说明书
2015/10/08 职场文书
2016教师廉洁教育心得体会
2016/01/13 职场文书