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 相关文章推荐
Excel数据导入Mysql数据库的实现代码
Jun 05 PHP
PHP 图片上传实现代码 带详细注释
Apr 29 PHP
php stream_get_meta_data返回值
Sep 29 PHP
纯PHP生成的一个树叶图片画图例子
Apr 16 PHP
php小技巧之过滤ascii控制字符
May 14 PHP
php将12小时制转换成24小时制的方法
Mar 31 PHP
php 类自动载入的方法
Jun 03 PHP
制作个性化的WordPress登陆界面的实例教程
May 21 PHP
PHP模块化安装教程
Jun 01 PHP
详解php中的implements 使用
Jun 13 PHP
PHP单文件上传原理及上传函数的封装操作示例
Sep 02 PHP
PHP操作Redis常用命令的实例详解
Dec 23 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
环境会对咖啡种植有什么影响
2021/03/03 咖啡文化
PHP的FTP学习(三)
2006/10/09 PHP
PHP array_flip() 删除重复数组元素专用函数
2010/05/16 PHP
PHP批量采集下载美女图片的实现代码
2013/06/03 PHP
PHP判断来访是搜索引擎蜘蛛还是普通用户的代码小结
2015/09/14 PHP
php实现连接access数据库并转txt写入的方法
2017/02/08 PHP
php 实现银联商务H5支付的示例代码
2019/10/12 PHP
JavaScript 不只是脚本
2007/05/30 Javascript
ie和firefox不兼容的解决方法集合
2009/04/28 Javascript
jquery 问答知识整理
2010/02/11 Javascript
javascript学习笔记(二十) 获得和设置元素的特性(属性)
2012/06/20 Javascript
Js判断参数(String,Array,Object)是否为undefined或者值为空
2013/11/04 Javascript
jQuery代码实现表格中点击相应行变色功能
2016/05/09 Javascript
Node.js Addons翻译(C/C++扩展)
2016/06/12 Javascript
jQuery on()方法绑定动态元素的点击事件实例代码浅析
2016/06/16 Javascript
Bootstrap3 多选和单选框(checkbox)
2016/12/29 Javascript
layui前段框架日期控件使用方法详解
2017/05/19 Javascript
javascript修改浏览器title方法 JS动态修改浏览器标题
2017/11/30 Javascript
Vue封装一个简单轻量的上传文件组件的示例
2018/03/21 Javascript
原生JS实现简单的无缝自动轮播效果
2018/09/26 Javascript
VUE2.0 ElementUI2.0表格el-table自适应高度的实现方法
2018/11/28 Javascript
详解如何利用Cython为Python代码加速
2018/01/27 Python
Python抓取聚划算商品分析页面获取商品信息并以XML格式保存到本地
2018/02/23 Python
对Python 简单串口收发GUI界面的实例详解
2019/06/12 Python
python 密码学示例——理解哈希(Hash)算法
2020/09/21 Python
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
2013/02/04 HTML / CSS
澳大利亚百货公司:David Jones
2018/02/08 全球购物
波兰化妆品和护肤品购物网站:eKobieca
2019/08/30 全球购物
潘多拉珠宝美国官方网站:Pandora US
2020/06/18 全球购物
英国最大的在线照明商店:Litecraft
2020/08/31 全球购物
联想C++笔试题
2012/06/13 面试题
家长会学生家长演讲稿
2013/12/29 职场文书
服装设计专业自荐信
2014/06/17 职场文书
师德标兵事迹材料
2014/12/19 职场文书
2016关于读书活动的心得体会
2016/01/14 职场文书
Django框架中视图的用法
2022/06/10 Python