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连接Oracle for NT 远程数据库
Oct 09 PHP
使用 php4 加速 web 传输
Oct 09 PHP
php 什么是PEAR?(第三篇)
Mar 19 PHP
php图片加中文水印实现代码分享
Oct 31 PHP
thinkphp中连接oracle时封装方法无法用的解决办法
Jun 17 PHP
安装apache2.2.22配置php5.4(具体操作步骤)
Jun 26 PHP
php的sso单点登录实现方法
Jan 08 PHP
php中smarty区域循环的方法
Jun 11 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
Aug 18 PHP
PHP 实现的将图片转换为TXT
Oct 21 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
Aug 07 PHP
PHP ADODB实现分页功能简单示例
May 25 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
PHP5 安装方法
2007/01/15 PHP
php写的带缓存数据功能的mysqli类
2012/09/06 PHP
PHP根据session与cookie用户登录状态操作类的代码
2016/05/13 PHP
Javascript结合css实现网页换肤功能
2009/11/02 Javascript
改善你的jQuery的25个步骤 千倍级效率提升
2010/02/11 Javascript
jQuery 一个图片切换的插件
2011/10/09 Javascript
jQuery阻止事件冒泡具体实现
2013/10/11 Javascript
js通过八个点 拖动改变div大小的实现方法
2014/03/05 Javascript
Js实现动态添加删除Table行示例
2014/04/14 Javascript
JavaScript跨域方法汇总
2014/10/16 Javascript
js判断鼠标位置是否在某个div中的方法
2016/02/26 Javascript
Bootstrap3 多个模态对话框无法显示的解决方案
2017/02/23 Javascript
JavaScript中undefined和null的区别
2017/05/03 Javascript
JavaScript设置名字输入不合法的实现方法
2017/05/23 Javascript
使用Node.js实现简易MVC框架的方法
2017/08/07 Javascript
JS中利用swiper实现3d翻转幻灯片实例代码
2017/08/25 Javascript
细说webpack源码之compile流程-rules参数处理技巧(2)
2017/12/26 Javascript
微信小程序实现倒计时补零功能
2018/07/09 Javascript
JavaScript实现跟随鼠标移动的盒子
2021/01/28 Javascript
python中执行shell命令的几个方法小结
2014/09/18 Python
Python从单元素字典中获取key和value的实例
2018/12/31 Python
Python opencv实现人眼/人脸识别以及实时打码处理
2019/04/29 Python
pytorch 指定gpu训练与多gpu并行训练示例
2019/12/31 Python
Python实现图像的垂直投影示例
2020/01/17 Python
Python实现从N个数中找到最大的K个数
2020/04/02 Python
Python实现验证码识别
2020/06/15 Python
创业计划书模版
2014/02/05 职场文书
护理学院专科毕业生求职信
2014/06/28 职场文书
园艺专业毕业生求职信
2014/09/02 职场文书
布达拉宫导游词
2015/02/02 职场文书
学校元旦晚会开场白
2015/05/29 职场文书
教你用python实现一个无界面的小型图书管理系统
2021/05/21 Python
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript
一文搞懂Golang 时间和日期相关函数
2021/12/06 Golang
疑《守望先锋2》A测截图泄露 或将推出新模式、新界面
2022/04/03 其他游戏
JS实现简单九宫格抽奖
2022/06/28 Javascript