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_Flame(Version:Progress)的原代码
Oct 09 PHP
介绍php设计模式中的工厂模式
Jun 12 PHP
php数组函数序列之array_keys() - 获取数组键名
Oct 30 PHP
PHP系统命令函数使用分析
Jul 05 PHP
php5.3 goto函数介绍和示例
Mar 21 PHP
PHP统计目录大小的自定义函数分享
Nov 18 PHP
windows中为php安装mongodb与memcache
Jan 06 PHP
PHP直接修改表内容DataGrid功能实现代码
Sep 24 PHP
PHP中substr函数字符串截取用法分析
Jan 07 PHP
关于 Laravel Redis 多个进程同时取队列问题详解
Dec 25 PHP
PHP设计模式之抽象工厂模式实例分析
Mar 25 PHP
php报错502badgateway解决方法
Oct 11 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在线生成二维码代码(google api)
2013/06/03 PHP
php empty()与isset()区别的详细介绍
2013/06/17 PHP
thinkphp循环结构用法实例
2014/11/24 PHP
学习ExtJS Column布局
2009/10/08 Javascript
JavaScript中两个感叹号的作用说明
2011/12/28 Javascript
JS 模态对话框和非模态对话框操作技巧汇总
2013/04/15 Javascript
JavaScript获取function所有参数名的方法
2015/10/30 Javascript
Bootstrap每天必学之附加导航(Affix)插件
2016/04/25 Javascript
JS组件Bootstrap实现弹出框效果代码
2016/04/26 Javascript
JavaScript String 对象常用方法详解
2016/05/13 Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
2016/05/17 Javascript
@ResponseBody 和 @RequestBody 注解的区别
2017/03/08 Javascript
JS实现留言板功能[楼层效果展示]
2017/12/27 Javascript
layer弹窗在键盘按回车将反复刷新的实现方法
2019/09/25 Javascript
element-ui树形控件后台返回的数据+生成组织树的工具类
2020/03/05 Javascript
原生JS实现记忆翻牌游戏
2020/07/31 Javascript
利用vue3+ts实现管理后台(增删改查)
2020/10/30 Javascript
ES6字符串的扩展实例
2020/12/21 Javascript
[00:12]DAC2018 天才少年转战三号位,他的SOLO是否仍如昔日般强大?
2018/04/06 DOTA
使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子
2014/04/15 Python
Python常用的文件及文件路径、目录操作方法汇总介绍
2015/05/21 Python
对Python的交互模式和直接运行.py文件的区别详解
2019/06/29 Python
python如何使用socketserver模块实现并发聊天
2019/12/14 Python
解决echarts中饼图标签重叠的问题
2020/05/16 Python
python新手学习可变和不可变对象
2020/06/11 Python
Visual Studio Code搭建django项目的方法步骤
2020/09/17 Python
CSS图片翻转动画技术详解(IE也实现了)
2014/04/03 HTML / CSS
HTML5中使用postMessage实现Ajax跨域请求的方法
2016/04/19 HTML / CSS
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
中班中秋节活动反思
2014/02/18 职场文书
反邪教宣传工作方案
2014/05/07 职场文书
天鹅湖观后感
2015/06/09 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书
Feign调用全局异常处理解决方案
2021/06/24 Java/Android
vue实现滑动解锁功能
2022/03/03 Vue.js
Mongodb 迁移数据块的流程介绍分析
2022/04/18 MongoDB