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 相关文章推荐
动态生成gif格式的图像要注意?
Oct 09 PHP
php 删除无限级目录与文件代码共享
Nov 22 PHP
php 一元分词算法
Nov 30 PHP
PHP通用检测函数集合
Feb 08 PHP
PHP多个版本的分析解释
Jul 21 PHP
php开发文档 会员收费1期
Aug 14 PHP
关于初学PHP时的知识积累总结
Jun 07 PHP
浅析php变量修饰符static的使用
Jun 28 PHP
PHP基于SimpleXML生成和解析xml的方法示例
Jul 17 PHP
PHP实现的链式队列结构示例
Sep 15 PHP
Laravel框架在本地虚拟机快速安装的方法详解
Jun 11 PHP
laravel 关联关系遍历数组的例子
Oct 10 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文档更新介绍
2011/07/22 PHP
PHP把网页保存为word文件的三种方法
2014/04/01 PHP
你应该知道PHP浮点数知识
2015/05/13 PHP
PHP实现的oracle分页函数实例
2016/01/25 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
2016/05/18 PHP
PHP文件操作详解
2016/12/30 PHP
laravel 事件/监听器实例代码
2019/04/12 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
2021/03/09 PHP
ExtJS PropertyGrid中使用Combobox选择值问题
2010/06/13 Javascript
jQuery的链式调用浅析
2010/12/03 Javascript
使用JQuery和CSS模拟超链接的用户单击事件的实现代码
2012/05/23 Javascript
分享XmlHttpRequest调用Webservice的一点心得
2012/07/20 Javascript
jQuery :first选择器使用介绍
2013/08/09 Javascript
jQuery操作表格(table)的常用方法、技巧汇总
2014/04/12 Javascript
jQuery 复合选择器应用的几个例子
2014/09/11 Javascript
使用控制台破解百小度一个月只准改一次名字
2015/08/13 Javascript
Javascript简单实现面向对象编程继承实例代码
2015/11/27 Javascript
AngularJS中如何使用$parse或$eval在运行时对Scope变量赋值
2016/01/25 Javascript
用nodejs的实现原理和搭建服务器(动态)
2016/08/10 NodeJs
Vue.js+cube-ui(Scroll组件)实现类似头条效果的横向滚动导航条
2019/06/24 Javascript
js实现图片3D轮播效果
2019/09/21 Javascript
vue+iview分页组件的封装
2020/11/17 Vue.js
零基础写python爬虫之爬虫框架Scrapy安装配置
2014/11/06 Python
Python图算法实例分析
2016/08/13 Python
Python 专题六 局部变量、全局变量global、导入模块变量
2017/03/20 Python
python中requests小技巧
2017/05/10 Python
基于MTCNN/TensorFlow实现人脸检测
2018/05/24 Python
Python Scrapy框架第一个入门程序示例
2020/02/05 Python
PyQt5实现画布小程序
2020/05/30 Python
python属于解释型语言么
2020/06/15 Python
HTML中meta标签及Keywords
2020/04/15 HTML / CSS
决定成败的关键——创业计划书
2014/01/24 职场文书
简历的自我评价
2014/02/03 职场文书
2014年打非治违工作总结
2014/11/13 职场文书
食堂采购员岗位职责
2015/04/03 职场文书
2019最新版股权转让及委托持股协议书范本
2019/08/07 职场文书