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与paypal整合方法
Nov 28 PHP
用PHP书写安全的脚本代码
Feb 05 PHP
析构函数与php的垃圾回收机制详解
Oct 28 PHP
php判断是否为json格式的方法
Mar 04 PHP
php中出现空白页的原因及解决方法汇总
Jul 08 PHP
PHP中让curl支持sock5的代码实例
Jan 21 PHP
php安装swoole扩展的方法
Mar 19 PHP
PHP使用pear自带的mail类库发邮件的方法
Jul 08 PHP
开启PHP的伪静态模式
Dec 31 PHP
详谈phpAdmin修改密码后拒绝访问的问题
Apr 03 PHP
php+js实现的无刷新下载文件功能示例
Aug 23 PHP
php校验公钥是否可用的实例方法
Sep 17 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
Sony CFR 320 修复改造
2020/03/14 无线电
PHP编程与应用
2006/10/09 PHP
smarty高级特性之过滤器的使用方法
2015/12/25 PHP
Laravel的throttle中间件失效问题解决方法
2016/10/09 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
php实现JWT(json web token)鉴权实例详解
2019/11/05 PHP
laravel中Redis队列监听中断的分析
2020/09/14 PHP
javscript对象原型的一些看法
2010/09/19 Javascript
javascript复制对象使用说明
2011/06/28 Javascript
node.js中的fs.existsSync方法使用说明
2014/12/17 Javascript
javascript中sort()的用法实例分析
2015/01/30 Javascript
Nginx上传文件全部缓存解决方案
2015/08/17 Javascript
AngularJS入门教程之AngularJS模型
2016/04/18 Javascript
jQuery事件处理的特征(事件命名机制)
2016/08/23 Javascript
javascript轮播图算法
2016/10/21 Javascript
JS图片压缩(pc端和移动端都适用)
2017/01/12 Javascript
老生常谈javascript中逻辑运算符&amp;&amp;和||的返回值问题
2017/04/13 Javascript
vue中路由参数传递可能会遇到的坑
2017/12/07 Javascript
解决vue项目报错webpackJsonp is not defined问题
2018/03/14 Javascript
[43:47]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第一局
2016/03/05 DOTA
python中import学习备忘笔记
2017/01/24 Python
Django 如何获取前端发送的头文件详解(推荐)
2017/08/15 Python
python解决pandas处理缺失值为空字符串的问题
2018/04/08 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
2019/02/13 Python
python小程序实现刷票功能详解
2019/07/17 Python
Python同时迭代多个序列的方法
2020/07/28 Python
用HTML5制作视频拼图的教程
2015/05/13 HTML / CSS
迪卡侬(Decathlon)加拿大官网:源自法国的运动专业超市
2020/11/22 全球购物
计算机专业个人求职自荐信
2013/09/21 职场文书
毕业证丢失证明
2014/01/15 职场文书
中学生打架检讨书
2014/02/10 职场文书
2014年清明节网上祭英烈寄语
2014/04/09 职场文书
党的群众路线教育实践活动制度建设计划方案
2014/10/31 职场文书
2015年电工工作总结
2015/04/10 职场文书
讲座通知范文
2015/04/23 职场文书
JavaScript流程控制(分支)
2021/12/06 Javascript