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 相关文章推荐
PHPMailer使用教程(PHPMailer发送邮件实例分析)
Dec 06 PHP
解析PHP中ob_start()函数的用法
Jun 24 PHP
php使用curl存储cookie的示例
Mar 31 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
Jun 27 PHP
PHP中array_map与array_column之间的关系分析
Aug 19 PHP
PHP读取txt文本文件并分页显示的方法
Mar 11 PHP
php实现登录tplink WR882N获取IP和重启的方法
Jul 20 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
Nov 25 PHP
php 7新特性之类型申明详解
Jun 06 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
Jun 13 PHP
Laravel 创建指定表 migrate的例子
Oct 09 PHP
php判断数组是否为空的实例方法
May 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 checkbox复选框值的获取与checkbox默认值输出方法
2010/05/15 PHP
PHP图片处理类 phpThumb参数用法介绍
2012/03/11 PHP
Yii rules常用规则示例
2016/03/15 PHP
Lumen timezone 时区设置方法(慢了8个小时)
2018/01/20 PHP
PHP工厂模式的日常使用
2019/03/20 PHP
PHP实现长轮询消息实时推送功能代码实例讲解
2021/02/26 PHP
JavaScript 封装Ajax传递的数据代码
2009/06/05 Javascript
Jquery对象和Dom对象的区别分析
2014/11/20 Javascript
js实现的捐赠管理完整实例
2015/01/20 Javascript
JavaScript生成随机数的4种自定义函数分享
2015/02/28 Javascript
jQuery实现在最后一个元素之前插入新元素的方法
2015/07/18 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
2015/12/15 Javascript
jQuery实现模仿微博下拉滚动条加载数据效果
2015/12/25 Javascript
易被忽视的js事件问题总结
2016/05/14 Javascript
BootStrap学习笔记之nav导航栏和面包屑导航
2017/01/03 Javascript
移动端web滚动分页的实现方法
2017/05/05 Javascript
JavaScript解析任意形式的json树型结构展示
2017/07/23 Javascript
解决Webpack 热部署检测不到文件变化的问题
2018/02/22 Javascript
jQuery基于随机数解决中午吃什么去哪吃问题示例
2018/12/29 jQuery
[32:36]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第二场 12.12
2020/12/16 DOTA
Python常用正则表达式符号浅析
2014/08/13 Python
21行Python代码实现拼写检查器
2016/01/25 Python
Opencv+Python实现图像运动模糊和高斯模糊的示例
2019/04/11 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
2019/12/04 Python
pytorch中获取模型input/output shape实例
2019/12/30 Python
pytorch 指定gpu训练与多gpu并行训练示例
2019/12/31 Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
2020/05/20 Python
Python 为什么推荐蛇形命名法原因浅析
2020/06/18 Python
在 Python 中使用 MQTT的方法
2020/08/18 Python
Python基于tkinter canvas实现图片裁剪功能
2020/11/05 Python
阿迪达斯加拿大官网:Adidas加拿大
2016/08/25 全球购物
init进程的作用
2012/04/12 面试题
离婚协议书格式
2014/11/21 职场文书
五一劳动节慰问信
2015/02/14 职场文书
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL
SQL Server数据库查询出现阻塞之性能调优
2022/04/10 SQL Server