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版(2)
Oct 09 PHP
一个没有MYSQL数据库支持的简易留言本的编写
Oct 09 PHP
PHP用户指南-cookies部分
Oct 09 PHP
php购物网站支付paypal使用方法
Nov 28 PHP
通过JavaScript或PHP检测Android设备的代码
Mar 09 PHP
php数组函数序列之array_unique() - 去除数组中重复的元素值
Oct 29 PHP
php通过array_merge()函数合并两个数组的方法
Mar 18 PHP
php使用GD创建保持宽高比缩略图的方法
Apr 17 PHP
[原创]php使用curl判断网页404(不存在)的方法
Jun 23 PHP
mac下多个php版本快速切换的方法
Oct 09 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
Laravel 添加多语言提示信息的方法
Sep 29 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
PHP6 mysql连接方式说明
2009/02/09 PHP
用C/C++扩展你的PHP 为你的php增加功能
2012/09/06 PHP
PHP基于递归实现的约瑟夫环算法示例
2017/08/27 PHP
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
2018/08/16 PHP
iis6+javascript Add an Extension File
2007/06/13 Javascript
Raphael一个用于在网页中绘制矢量图形的Javascript库
2013/01/08 Javascript
js实现数组去重、判断数组以及对象中的内容是否相同
2013/11/29 Javascript
Jquery动态添加输入框的方法
2015/05/29 Javascript
js组件SlotMachine实现图片切换效果制作抽奖系统
2016/04/17 Javascript
微信小程序 animation API详解及实例代码
2016/10/08 Javascript
浅谈Vue.nextTick 的实现方法
2017/10/25 Javascript
vue .sync修饰符的使用详解
2018/06/15 Javascript
vue在自定义组件中使用v-model进行数据绑定的方法
2019/03/25 Javascript
ES6中Promise的使用方法实例总结
2020/02/18 Javascript
浅析Python中signal包的使用
2015/11/13 Python
python3.5仿微软计算器程序
2020/03/30 Python
Python cookbook(数据结构与算法)让字典保持有序的方法
2018/02/18 Python
python使用turtle库与random库绘制雪花
2018/06/22 Python
python使用tornado实现简单爬虫
2018/07/28 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
2018/12/05 Python
浅谈Python批处理文件夹中的txt文件
2019/03/11 Python
NumPy 基本切片和索引的具体使用方法
2019/04/24 Python
python解压TAR文件至指定文件夹的实例
2019/06/10 Python
python3.7 使用pymssql往sqlserver插入数据的方法
2019/07/08 Python
python用requests实现http请求代码实例
2019/10/31 Python
澳大利亚最受欢迎的美发用品目的地:AMR
2019/08/28 全球购物
Dr. Martens马汀博士德国官网:马丁靴鼻祖
2019/12/26 全球购物
英国排名第一的宠物店:PetPlanet
2020/02/02 全球购物
最畅销的视频游戏享受高达90%的折扣:CDKeys
2020/02/10 全球购物
餐厅总经理岗位职责
2013/12/31 职场文书
幼儿园教师工作制度
2014/01/22 职场文书
优秀经理获奖感言
2014/03/04 职场文书
经济贸易系求职信
2014/08/04 职场文书
基层党员对照检查材料
2014/08/25 职场文书
Nginx防盗链与服务优化配置的全过程
2022/01/18 Servers
springcloud整合seata
2022/05/20 Java/Android