php中突破基于HTTP_REFERER的防盗链措施(stream_context_create)


Posted in PHP onMarch 29, 2011

那么如果考虑突破防盗链的措施,就需要考虑在 HTTP_REFERER 上面做手脚了。PHP 脚本中对应的变量是 $_SERVER['HTTP_REFERER'] ,它存储了 HTTP_REFERER 的值。

由于直接访问目标 URL 资源已经被上述防盗链的措施给屏蔽,所以我们需要个类似网关的玩意去获取。说白了就是编写已经包装过的 HTTP 头的 PHP 脚本。

下面是简单的函数实现:

function getRemoteFile($url, $refer = '') { 
$option = array( 
'http' => array( 
'header' => "Referer:$refer") 
); 
$context = stream_context_create($option); 
return file_get_contents($url, false, $context); 
}

这是个比较简单的函数,其功能就是伪造 Referer (使用 stream_context_create 函数)然后获取对方的数据(使用 file_get_contents,需要开启 allow_url_fopen )。

如果想“复杂”一点,可以使用 sockets 扩展,这不在这里的讨论范围以内。

另外,再提供个获取主机名的正则函数

function getHost($url) { 
$result = preg_match('/^http:\/\/([\d|\w|\.]+)\//', $url, $matches); 
if (sizeof($matches) >= 2) { 
return $matches[1]; 
} else { 
return null; 
} 
}

再进一步的扩展,可以封装成脚本,然后譬如调用

http://127.0.0.1/proxy.php?url=http://i.am/img就可以获取那些开启防盗链措施的链接了(再发挥下,使用 Javascript 将图片链接全部替换)。

PHP 相关文章推荐
PHP - Html Transfer Code
Oct 09 PHP
dedecms 制作模板中使用的全局标记图文教程
Mar 11 PHP
说明的比较细的php 正则学习实例
Jul 30 PHP
优化PHP程序的方法小结
Feb 23 PHP
CodeIgniter安全相关设置汇总
Jul 03 PHP
php防止sql注入之过滤分页参数实例
Nov 03 PHP
PHP中模拟链表和链表的基本操作示例
Feb 27 PHP
ThinkPHP使用Ueditor的方法详解
May 20 PHP
Yii2中事务的使用实例代码详解
Sep 07 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
Aug 30 PHP
Thinkphp框架+Layui实现图片/文件上传功能分析
Feb 07 PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
Apr 07 PHP
PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
Mar 28 #PHP
php中关于普通表单多文件上传的处理方法
Mar 25 #PHP
PHP删除特定数组内容并且重建数组索引的方法.
Mar 25 #PHP
PHP学习 变量使用总结
Mar 24 #PHP
优化php效率,提高php性能的一些方法
Mar 24 #PHP
php 代码优化之经典示例
Mar 24 #PHP
php模拟asp中的XmlHttpRequest实现http请求的代码
Mar 24 #PHP
You might like
PHP伪造referer实例代码
2008/09/20 PHP
PHP垃圾回收机制简单说明
2010/07/22 PHP
php实现约瑟夫问题的方法小结
2015/03/23 PHP
js 实现打印网页中定义的部分内容的代码
2010/04/01 Javascript
使用JS读秒使用示例
2013/09/21 Javascript
使用js操作css实现js改变背景图片示例
2014/03/10 Javascript
JavaScript DOM节点添加示例
2014/07/16 Javascript
jquery-file-upload 文件上传带进度条效果
2017/11/21 jQuery
使用express搭建一个简单的查询服务器的方法
2018/02/09 Javascript
解决vue中无法动态修改jqgrid组件 url地址的问题
2018/03/01 Javascript
jquery获取img的src值实例介绍
2019/01/16 jQuery
新手快速入门JavaScript装饰者模式与AOP
2019/06/24 Javascript
vue使用高德地图根据坐标定位点的实现代码
2019/08/22 Javascript
vue使用canvas实现移动端手写签名
2020/09/22 Javascript
[05:31]DOTA2英雄梦之声_第04期_光之守卫
2014/06/23 DOTA
python中bisect模块用法实例
2014/09/25 Python
Python读取txt内容写入xls格式excel中的方法
2018/10/11 Python
Python的垃圾回收机制详解
2019/08/28 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
python实现超市商品销售管理系统
2019/10/25 Python
Python如何截图保存的三种方法(小结)
2020/09/01 Python
Python字符串的15个基本操作(小结)
2021/02/03 Python
Django与AJAX实现网页动态数据显示的示例代码
2021/02/24 Python
CSS3弹性伸缩布局之box布局
2016/07/12 HTML / CSS
C#中的验证控件有几种
2014/03/08 面试题
电子商务专业毕业生工作推荐信
2013/11/17 职场文书
学生安全教育材料
2014/02/14 职场文书
志愿者服务感言
2014/02/27 职场文书
六一儿童节主持词
2014/03/21 职场文书
公证书标准格式
2014/04/10 职场文书
2015大学迎新标语
2015/07/16 职场文书
2016廉洁从政心得体会
2016/01/19 职场文书
2019年新郎保证书3篇
2019/10/17 职场文书
2019年最新感恩节祝福语(28句)
2019/11/27 职场文书
JavaScript 实现页面滚动动画
2021/04/24 Javascript
一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的
2021/05/25 MySQL