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 相关文章推荐
How do I change MySQL timezone?
Mar 26 PHP
细谈php中SQL注入攻击与XSS攻击
Jun 10 PHP
PHPThumb图片处理实例
May 03 PHP
PHP输出英文时间日期的安全方法(RFC 1123格式)
Jun 13 PHP
php递归删除指定文件夹的方法小结
Apr 20 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
Mar 23 PHP
php array_values 返回数组的值实例详解
Nov 17 PHP
Docker搭建自己的PHP开发环境
Feb 24 PHP
PHP cURL获取微信公众号access_token的实例
Apr 28 PHP
PHP实现生成数据字典功能示例
May 24 PHP
浅谈PHP SHA1withRSA加密生成签名及验签
Mar 18 PHP
THINKPHP5分页数据对象处理过程解析
Oct 28 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中的数组操作函数整理
2008/08/18 PHP
关于PHP语言构造器介绍
2013/07/08 PHP
PHP 导出Excel示例分享
2014/08/18 PHP
smarty表格换行实例
2014/12/15 PHP
替换php字符串中的单引号为双引号的方法
2017/02/16 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
2019/10/04 PHP
获取当前网页document.url location.href区别总结
2008/05/10 Javascript
利用Ext Js生成动态树实例代码
2008/09/08 Javascript
css样式标签和js语法属性区别
2013/11/06 Javascript
jQuery监听文件上传实现进度条效果的方法
2016/10/16 Javascript
原生js实现可拖拽效果
2017/02/28 Javascript
vue-cli+webpack记事本项目创建
2017/04/01 Javascript
Vue.js实现列表清单的操作方法
2017/11/15 Javascript
小程序视频列表中视频的播放与停止的示例代码
2018/07/20 Javascript
jQuery表单元素过滤选择器用法实例分析
2019/02/20 jQuery
小程序点击图片实现png转jpg
2019/10/22 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
2020/09/16 Javascript
vue中h5端打开app(判断是安卓还是苹果)
2021/02/26 Vue.js
Python 代码性能优化技巧分享
2012/08/07 Python
Python中的time模块与datetime模块用法总结
2016/06/30 Python
python实现NB-IoT模块远程控制
2018/06/20 Python
Python批处理更改文件名os.rename的方法
2018/10/26 Python
python matplotlib实现双Y轴的实例
2019/02/12 Python
详解django中url路由配置及渲染方式
2019/02/25 Python
Python3.5内置模块之shelve模块、xml模块、configparser模块、hashlib、hmac模块用法分析
2019/04/27 Python
python 绘制拟合曲线并加指定点标识的实现
2019/07/10 Python
Python类继承和多态原理解析
2020/02/05 Python
Python气泡提示与标签的实现
2020/04/01 Python
Python getattr()函数使用方法代码实例
2020/08/10 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
瑞贝卡·明可弗包包官网:Rebecca Minkoff
2016/07/21 全球购物
Under Armour安德玛中国官网:美国高端运动科技品牌
2018/03/09 全球购物
北京泡泡网网络有限公司.net面试题
2012/07/17 面试题
青年文明号服务承诺
2014/03/31 职场文书
作文评语大全
2014/04/23 职场文书
vue组件冲突之引用另一个组件出现组件不显示的问题
2022/04/13 Vue.js