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中显示格式化的用户输入
Oct 09 PHP
php 文件夹删除、php清除缓存程序
Aug 25 PHP
php一行代码获取文件后缀名实例分析
Nov 12 PHP
使用PHP把HTML生成PDF文件的几个开源项目介绍
Nov 17 PHP
win7系统配置php+Apache+mysql环境的方法
Aug 21 PHP
php代码架构的八点注意事项
Jan 25 PHP
Windows2003下php5.4安装配置教程(Apache2.4)
Jun 30 PHP
php实现学生管理系统
Mar 21 PHP
php 无限分类 树形数据格式化代码
Oct 11 PHP
yii插入数据库防并发的简单代码
May 27 PHP
PHP7新功能总结
Apr 14 PHP
Laravel框架Request、Response及Session操作示例
May 06 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
日本十大惊悚动漫
2020/03/04 日漫
支持oicq头像的留言簿(一)
2006/10/09 PHP
PHP 5.0 Pear安装方法
2006/12/06 PHP
libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
2010/03/15 PHP
用穿越火线快速入门php面向对象
2012/02/22 PHP
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
2013/06/20 PHP
学习php设计模式 php实现单例模式(singleton)
2015/12/07 PHP
php提交post数组参数实例分析
2015/12/17 PHP
Laravel框架实现文件上传的方法分析
2019/09/29 PHP
非常不错的功能强大代码简单的管理菜单美化版
2008/07/09 Javascript
JavaScript基本概念初级讲解论坛贴的学习记录
2009/02/22 Javascript
js判断IE6/IE7/FF的代码[XMLHttpRequest]
2011/02/16 Javascript
基于JavaScript实现继承机制之原型链(prototype chaining)的详解
2013/05/07 Javascript
js实现从右向左缓缓浮出网页浮动层广告的方法
2015/05/09 Javascript
jQuery实现为图片添加镜头放大效果的方法
2015/06/25 Javascript
深入理解bootstrap框架之入门准备
2016/10/09 Javascript
js获取时间函数及扩展函数的方法
2016/10/30 Javascript
jQuery实现简单的抽奖游戏
2017/05/05 jQuery
node.js中express-session配置项详解
2017/05/31 Javascript
Vue.js实现图片的随意拖动方法
2018/03/08 Javascript
jQuery实现简单的Ajax调用功能示例
2019/02/15 jQuery
JS删除数组指定值常用方法详解
2020/06/04 Javascript
javascript 数组(list)添加/删除的实现
2020/12/17 Javascript
Python模块搜索概念介绍及模块安装方法介绍
2015/06/03 Python
Python二叉搜索树与双向链表转换实现方法
2016/04/29 Python
神经网络python源码分享
2017/12/15 Python
pycharm打开命令行或Terminal的方法
2019/01/16 Python
对python生成业务报表的实例详解
2019/02/03 Python
python3中的eval和exec的区别与联系
2019/10/10 Python
python实现四人制扑克牌游戏
2020/04/22 Python
python中@property的作用和getter setter的解释
2020/12/22 Python
ANINE BING官方网站:奢华的衣橱基本款和时尚永恒的单品
2019/11/26 全球购物
教师反腐倡廉演讲稿
2014/09/03 职场文书
教师党员个人整改措施
2014/10/27 职场文书
2015年国庆节新闻稿
2015/07/18 职场文书
Spring中bean集合注入的方法详解
2022/07/07 Java/Android