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数据库
Oct 09 PHP
将时间以距今多久的形式表示,PHP,js双版本
Sep 25 PHP
php-cli简介(不会Shell语言一样用Shell)
Jun 03 PHP
浅析关于PHP位运算的简单权限设计
Jun 30 PHP
php 如何获取数组第一个值
Aug 06 PHP
zf框架的zend_cache缓存使用方法(zend框架)
Mar 14 PHP
PHP中的使用curl发送请求(GET请求和POST请求)
Feb 08 PHP
Yii2框架自定义验证规则操作示例
Feb 08 PHP
laravel 查询数据库获取结果实现判断是否为空
Oct 24 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
May 27 PHP
基于PHP实现用户在线状态检测
Nov 10 PHP
TP5多入口设置实例讲解
Dec 15 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 数组排序 array_multisort与uasort的区别
2011/03/24 PHP
php使用date和strtotime函数输出指定日期的方法
2014/11/14 PHP
PHP调试函数和日志记录函数分享
2015/01/31 PHP
PHP面向对象程序设计之接口的继承定义与用法详解
2018/12/20 PHP
tp5框架的增删改查操作示例
2019/10/31 PHP
浅析LigerUi开发中谨慎载入common.css文件
2013/07/09 Javascript
深入理解Javascript中的循环优化
2013/11/09 Javascript
node.js中使用node-schedule实现定时任务实例
2014/06/03 Javascript
javascript实现带下拉子菜单的导航菜单效果
2015/05/14 Javascript
JS简单实现城市二级联动选择插件的方法
2015/08/19 Javascript
JavaScript蒙板(model)功能的简单实现代码
2016/08/04 Javascript
基于js实现二级下拉联动
2016/12/17 Javascript
Bootstrap框架安装使用详解
2017/01/21 Javascript
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
vue 打包后的文件部署到express服务器上的方法
2017/08/09 Javascript
React Native中Mobx的使用方法详解
2018/12/04 Javascript
vue动态禁用控件绑定disable的例子
2019/10/28 Javascript
uni-app微信小程序登录授权的实现
2020/05/22 Javascript
Vue中keep-alive组件的深入理解
2020/08/23 Javascript
Python学习笔记整理3之输入输出、python eval函数
2015/12/14 Python
Python File readlines() 使用方法
2018/03/19 Python
python 获取页面表格数据存放到csv中的方法
2018/12/26 Python
Python字典的核心底层原理讲解
2019/01/24 Python
利用Python对文件夹下图片数据进行批量改名的代码实例
2019/02/21 Python
由Python编写的MySQL管理工具代码实例
2019/04/09 Python
Python微信操控itchat的方法
2019/05/31 Python
快速解决pyqt5窗体关闭后子线程不同时退出的问题
2019/06/19 Python
详解程序意外中断自动重启shell脚本(以Python为例)
2019/07/26 Python
浅谈Python里面None True False之间的区别
2020/07/09 Python
将时尚融入珠宝:Adornmonde
2019/10/17 全球购物
.NET程序员的几道面试题
2012/06/01 面试题
影视广告专业求职信
2014/09/02 职场文书
2014县委书记四风对照检查材料思想汇报
2014/09/21 职场文书
武侯祠导游词
2015/02/04 职场文书
详解Golang如何优雅的终止一个服务
2022/03/21 Golang
Fluentd搭建日志收集服务
2022/09/23 Servers