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 相关文章推荐
通过ODBC连接的SQL SERVER实例
Oct 09 PHP
PHP中include()与require()的区别说明
Mar 10 PHP
php 上一篇,下一篇文章实现代码与原理说明
May 09 PHP
php中unlink()、mkdir()、rmdir()等方法的使用介绍
Dec 21 PHP
PHP查询快递信息的方法
Mar 07 PHP
分享PHP计算两个日期相差天数的代码
Dec 23 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
Jan 08 PHP
php如何计算两坐标点之间的距离
Dec 29 PHP
PHP实现对数字分隔加千分号的方法
Mar 18 PHP
PHP Cli 模式设置进程名称的方法
Jun 12 PHP
YII2框架中behavior行为的理解与使用方法示例
Mar 13 PHP
yii2.0框架多模型操作示例【添加/修改/删除】
Apr 13 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 按位与或 (^ 、&amp;)
2013/06/21 PHP
php实现图片局部打马赛克的方法
2015/02/11 PHP
PHP直接修改表内容DataGrid功能实现代码
2015/09/24 PHP
php实现将二维关联数组转换成字符串的方法详解
2017/07/31 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
php fread函数使用方法总结
2019/05/28 PHP
JS 巧妙获取剪贴板数据 Excel数据的粘贴
2009/07/09 Javascript
JavaScript高级程序设计(第3版)学习笔记13 ECMAScript5新特性
2012/10/11 Javascript
JQuery+CSS提示框实现思路及代码(纯手工打造)
2013/05/07 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
2013/11/12 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
BootStrap无限级分类(无限极分类封装版)
2016/08/26 Javascript
jQuery轮播图效果精简版完整示例
2016/09/04 Javascript
详解微信小程序审核不通过的解决方法
2018/01/17 Javascript
nodejs微信开发之接入指南
2019/03/17 NodeJs
js布局实现单选按钮控件
2020/01/17 Javascript
JavaScript逻辑运算符相关总结
2020/09/04 Javascript
Vue如何实现变量表达式选择器
2021/02/18 Vue.js
[02:25]DOTA2英雄基础教程 生死判决瘟疫法师
2013/12/06 DOTA
[45:40]Ti4 冒泡赛第二天NEWBEE vs NaVi 1
2014/07/15 DOTA
在python3环境下的Django中使用MySQL数据库的实例
2017/08/29 Python
Python入门必须知道的11个知识点
2018/03/21 Python
python 获取list特定元素下标的实例讲解
2018/04/09 Python
python线程安全及多进程多线程实现方法详解
2019/09/27 Python
分享PyCharm的几个使用技巧
2019/11/10 Python
jupyter notebook插入本地图片的实现
2020/04/13 Python
详解Python 最短匹配模式
2020/07/29 Python
html5拍照功能实现代码(htm5上传文件)
2013/12/11 HTML / CSS
专门出售各种儿童读物的网站:Put Me In The Story
2016/08/07 全球购物
澳大利亚家具商店:Freedom
2020/12/17 全球购物
机械制造专业毕业生求职信
2014/03/02 职场文书
企业环保标语
2014/06/10 职场文书
党的群众路线教育实践活动实施方案
2014/10/31 职场文书
人民检察院起诉书
2015/05/20 职场文书
单身狗福利?Python爬取某婚恋网征婚数据
2021/06/03 Python
对象析构函数__del__在Python中何时使用
2022/03/22 Python