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 相关文章推荐
对Session和Cookie的区分与解释
Mar 16 PHP
php面向对象全攻略 (九)访问类型
Sep 30 PHP
php下删除一篇文章生成的多个静态页面
Aug 08 PHP
php修改时间格式的代码
May 29 PHP
php中批量修改文件后缀名的函数代码
Oct 23 PHP
PHP重定向的3种方式
Mar 07 PHP
基于PHP导出Excel的小经验 完美解决乱码问题
Jun 10 PHP
浅析linux下apache服务器的配置和管理
Aug 10 PHP
[原创]php获取数组中键值最大数组项的索引值
Mar 17 PHP
php数据访问之查询关键字
May 09 PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
Apr 14 PHP
php框架CI(codeigniter)自动加载与自主创建对象操作实例分析
Jun 06 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
递归列出所有文件和目录
2006/10/09 PHP
[原创]PHP中通过ADODB库实现调用Access数据库之修正版本
2006/12/31 PHP
php 什么是PEAR?
2009/03/19 PHP
php session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
2009/11/27 PHP
ajax 的post方法实例(带循环)
2011/07/04 PHP
PHPUnit安装及使用示例
2014/10/29 PHP
PHP设计模式入门之迭代器模式原理与实现方法分析
2020/04/26 PHP
javascript 对象的定义方法
2007/01/10 Javascript
js 替换功能函数,用正则表达式解决,js的全部替换
2010/12/08 Javascript
javascript学习笔记(二) js一些基本概念
2012/06/18 Javascript
jQuery+CSS 半开折叠效果原理及代码(自写)
2013/03/04 Javascript
用js实现小球的自由移动代码
2013/04/22 Javascript
javascript对JSON数据排序的3个例子
2014/04/12 Javascript
javascript实现全角半角检测的方法
2015/07/23 Javascript
jQuery实现ctrl+enter(回车)提交表单
2015/10/19 Javascript
jQuery实现仿QQ头像闪烁效果的文字闪动提示代码
2015/11/03 Javascript
JavaScript中undefined和null的区别
2017/05/03 Javascript
详解如何使用webpack打包JS
2018/06/21 Javascript
纯JS实现五子棋游戏
2020/05/28 Javascript
js+for循环实现字符串自动转义的代码(把后面的字符替换前面的字符)
2020/12/24 Javascript
详解 Python中LEGB和闭包及装饰器
2017/08/03 Python
关于Python中空格字符串处理的技巧总结
2017/08/10 Python
分析python动态规划的递归、非递归实现
2018/03/04 Python
基于python代码实现简易滤除数字的方法
2018/07/17 Python
Appium+python自动化怎么查看程序所占端口号和IP
2019/06/14 Python
canvas如何实现多张图片编辑的图片编辑器
2020/03/10 HTML / CSS
世界上最大的各式箱包网络零售店:eBag
2016/07/21 全球购物
活动邀请函范文
2014/01/19 职场文书
会计求职信范文
2014/05/24 职场文书
民警个人对照检查剖析材料
2014/09/17 职场文书
军训决心书范文
2015/09/22 职场文书
《少年闰土》教学反思
2016/02/18 职场文书
大学生自我鉴定怎么写
2019/05/07 职场文书
MySQL Innodb关键特性之插入缓冲(insert buffer)
2021/04/08 MySQL
HTML5 新增内容和 API详解
2021/11/17 HTML / CSS
详解Mysq MVCC多版本的并发控制
2022/04/29 MySQL