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脚本数据库功能详解(中)
Oct 09 PHP
PHP 计算代码执行耗时的代码修正网上普遍错误
May 14 PHP
php下载文件的代码示例
Jun 29 PHP
thinkphp3.2.2前后台公用类架构问题分析
Nov 25 PHP
PHP查询快递信息的方法
Mar 07 PHP
php实现的简单日志写入函数
Mar 31 PHP
PHP Opcache安装和配置方法介绍
May 28 PHP
3种php生成唯一id的方法
Nov 23 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
Jan 03 PHP
php版微信小店API二次开发及使用示例
Nov 12 PHP
PHP输出多个元素的排列或组合的方法
Mar 14 PHP
PHP基于ORM方式操作MySQL数据库实例
Jun 21 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系统流量分析的程序
2006/10/09 PHP
php变量作用域的深入解析
2013/06/03 PHP
php操作csv文件代码实例汇总
2014/09/22 PHP
php进行支付宝开发中return_url和notify_url的区别分析
2014/12/22 PHP
Zend Framework教程之视图组件Zend_View用法详解
2016/03/05 PHP
PHP经典算法集锦【经典收藏】
2016/09/14 PHP
PHP 极验验证码实例讲解
2016/09/29 PHP
JavaScript高级程序设计 阅读笔记(十七) js事件
2012/08/14 Javascript
jQuery登陆判断简单实现代码
2013/04/21 Javascript
AngularJS实现与Java Web服务器交互操作示例【附demo源码下载】
2016/11/02 Javascript
微信小程序 网络API 上传、下载详解
2016/11/09 Javascript
微信小程序商城项目之商品属性分类(4)
2017/04/17 Javascript
vue实现element-ui对话框可拖拽功能
2018/08/17 Javascript
在layui.use 中自定义 function 的正确方法
2019/09/16 Javascript
js实现百度登录窗口拖拽效果
2020/03/19 Javascript
微信小程序实现上拉加载功能示例【加载更多数据/触底加载/点击加载更多数据】
2020/05/29 Javascript
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
python持久性管理pickle模块详细介绍
2015/02/18 Python
Python实现windows下模拟按键和鼠标点击的方法
2015/03/13 Python
Python实现聊天机器人的示例代码
2018/07/09 Python
Python字符串的全排列算法实例详解
2019/01/07 Python
Python OS模块实例详解
2019/04/15 Python
Django 框架模型操作入门教程
2019/11/05 Python
python代码如何实现余弦相似性计算
2020/02/09 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现
2020/04/22 Python
opencv 图像滤波(均值,方框,高斯,中值)
2020/07/08 Python
Pyecharts 中Geo函数常用参数的用法说明
2021/02/01 Python
HTML5 Canvas图像模糊完美解决办法
2018/02/06 HTML / CSS
what is the difference between ext2 and ext3
2013/11/03 面试题
大学生毕业自我鉴定范文
2013/09/19 职场文书
电厂职工自我鉴定
2014/02/20 职场文书
高效课堂标语
2014/06/26 职场文书
高中军训的心得体会
2014/09/01 职场文书
九一八事变演讲稿范文
2014/09/14 职场文书
SQL实战演练之网上商城数据库商品类别数据操作
2021/10/24 MySQL