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 相关文章推荐
?繁体转换的class
Oct 09 PHP
PHP 操作文件的一些FAQ总结
Feb 12 PHP
Discuz 模板语句分析及知识技巧
Aug 21 PHP
初学CAKEPHP 基础教程
Nov 02 PHP
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
Feb 16 PHP
整理的9个实用的PHP库简介和下载
Nov 09 PHP
PHP合并两个数组的两种方式的异同
Sep 14 PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
Jun 27 PHP
PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
Nov 20 PHP
PHP 实现从数据库导出到.csv文件方法
Jul 06 PHP
php爬取天猫和淘宝商品数据
Feb 23 PHP
PHP Trait功能与用法实例分析
Jun 03 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
openPNE常用方法分享
2011/11/29 PHP
PHP语言中global和$GLOBALS[]的分析 之二
2012/02/02 PHP
基于PHP中的常用函数回顾
2013/07/11 PHP
PHP中调用SVN命令更新网站方法
2015/01/07 PHP
PHP 中常量的知识整理
2017/04/14 PHP
Laravel框架之解决前端显示图片问题
2019/10/24 PHP
如何将JS的变量值传递给ASP变量
2012/12/10 Javascript
自己封装的javascript事件队列函数版
2014/06/12 Javascript
javascript实现全局匹配并替换的方法
2015/04/27 Javascript
jQuery实现向下滑出的平滑下拉菜单效果
2015/08/21 Javascript
js实现简单的手风琴效果
2017/02/27 Javascript
vue.js的computed,filter,get,set的用法及区别详解
2018/03/08 Javascript
vue中的ref和$refs的使用
2018/11/22 Javascript
20道JS原理题助你面试一臂之力(必看)
2019/07/22 Javascript
layui radio单选限制下一个radio单选的实例
2019/09/03 Javascript
Element InputNumber 计数器的实现示例
2020/08/03 Javascript
解决vue scoped html样式无效的问题
2020/10/24 Javascript
[05:36]DOTA2 2015国际邀请赛中国区预选赛第四日TOP10
2015/05/29 DOTA
[02:39]我与DAC之Newbee.Moogy:从论坛到TI
2018/03/26 DOTA
Python利用pandas处理Excel数据的应用详解
2019/06/18 Python
Python如何访问字符串中的值
2020/02/09 Python
Python偏函数Partial function使用方法实例详解
2020/06/17 Python
详解Python中import机制
2020/09/11 Python
基于HTML5 Canvas 实现弹出框效果
2017/06/05 HTML / CSS
广州某公司软件工程师面试题
2014/12/22 面试题
土木工程毕业生自荐信
2013/11/12 职场文书
装修致歉信
2014/01/15 职场文书
优秀护士获奖感言
2014/02/20 职场文书
优秀食品类广告词
2014/03/19 职场文书
贺卡寄语大全
2014/04/11 职场文书
幼儿园清明节活动总结
2014/07/04 职场文书
2014财务年度工作总结
2014/11/11 职场文书
2015年学生会工作总结范文
2015/03/31 职场文书
2015年教研工作总结
2015/05/23 职场文书
师范生见习总结范文
2015/06/23 职场文书
Redis实现订单过期删除的方法步骤
2022/06/05 Redis