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初学者的8点有效建议
Nov 20 PHP
php压缩多个CSS为一个css的代码并缓存
Apr 21 PHP
通过table标签,PHP输出EXCEL的实现方法
Jul 24 PHP
php使用sql数据库 获取字段问题介绍
Aug 12 PHP
php用正则表达式匹配URL的简单方法
Nov 12 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
Aug 19 PHP
Smarty中常用变量操作符汇总
Oct 27 PHP
php实现计数器方法小结
Jan 05 PHP
PHP处理CSV表格文件的常用操作方法总结
Jul 01 PHP
PHP遍历目录文件的常用方法小结
Feb 03 PHP
laravel 事件/监听器实例代码
Apr 12 PHP
PHP对接阿里云虚拟号的实现(号码隐私保护)
Apr 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
php数组函数序列之rsort() - 对数组的元素值进行降序排序
2011/11/02 PHP
PHP+RabbitMQ实现消息队列的完整代码
2019/03/20 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
JavaScript 打地鼠游戏代码说明
2010/10/12 Javascript
在VS2008中使用jQuery智能感应的方法
2010/12/30 Javascript
jQuery ajax serialize()方法的使用以及常见问题解决
2013/01/27 Javascript
js中的eventType事件及其浏览器支持性介绍
2013/11/29 Javascript
JavaScript实现带缓冲效果的随屏滚动漂浮广告代码
2015/11/06 Javascript
jquery表单验证需要做些什么
2015/11/17 Javascript
JavaScript中eval()函数用法详解
2015/12/14 Javascript
javascript实现下雪效果【实例代码】
2016/05/03 Javascript
原生JS实现轮播效果+学前端的感受(防止走火入魔)
2016/08/21 Javascript
canvas实现手机端用来上传用户头像的代码
2016/10/20 Javascript
React中上传图片到七牛的示例代码
2017/10/10 Javascript
vue-cli3脚手架的配置及使用教程
2018/08/28 Javascript
JS 封装父页面子页面交互接口的实例代码
2019/06/25 Javascript
Python3实现的腾讯微博自动发帖小工具
2013/11/11 Python
Python 中pandas.read_excel详细介绍
2017/06/23 Python
python在非root权限下的安装方法
2018/01/23 Python
python 整数越界问题详解
2019/06/27 Python
使用python将多个excel文件合并到同一个文件的方法
2019/07/09 Python
python ImageDraw类实现几何图形的绘制与文字的绘制
2020/02/26 Python
Pytorch对Himmelblau函数的优化详解
2020/02/29 Python
keras的ImageDataGenerator和flow()的用法说明
2020/07/03 Python
丝芙兰巴西官方商城:SEPHORA巴西
2016/10/31 全球购物
什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
2012/05/23 面试题
啤酒销售实习自我鉴定
2013/09/24 职场文书
大学自我鉴定
2013/12/20 职场文书
廉洁自律承诺书
2014/03/27 职场文书
办公用房租赁协议书
2014/11/29 职场文书
四大名著读书笔记
2015/06/25 职场文书
2016年中学植树节活动总结
2016/03/16 职场文书
教你怎么用python实现字符串转日期
2021/05/24 Python
CSS实现五种常用的2D转换
2021/12/06 HTML / CSS
MySQL数据库如何给表设置约束详解
2022/03/13 MySQL
Python的property属性详细讲解
2022/04/11 Python