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+dbfile开发小型留言本
Oct 09 PHP
我的群发邮件程序
Oct 09 PHP
8个出色的WordPress SEO插件收集
Feb 26 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(一)
Jun 23 PHP
PHP中预定义的6种接口介绍
May 12 PHP
php实现比较两个文件夹异同的方法
Jun 18 PHP
PHP基于文件存储实现缓存的方法
Jul 20 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
Dec 21 PHP
PHP封装的多文件上传类实例与用法详解
Feb 07 PHP
Yii 2.0在Grid中格式化时间方法示例
Jun 06 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
Oct 12 PHP
php+ajax 文件上传代码实例
Mar 18 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类包含的七种语法说明
2015/06/04 PHP
PHP实现多文件上传的方法
2015/07/08 PHP
PHP实现的登录,注册及密码修改功能分析
2016/11/25 PHP
PHP+RabbitMQ实现消息队列的完整代码
2019/03/20 PHP
javascript中的括号()用法小结
2014/04/14 Javascript
原生JavaScript实现合并多个数组示例
2014/09/21 Javascript
利用Angularjs实现幻灯片效果
2016/09/07 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
2016/12/28 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
2017/01/20 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
2017/02/14 Javascript
bootstrap timepicker在angular中取值并转化为时间戳
2017/06/13 Javascript
Vue 进入/离开动画效果
2017/12/26 Javascript
微信小程序实现美团菜单
2018/06/06 Javascript
在vue中多次调用同一个定义全局变量的实例
2018/09/25 Javascript
javascript 关于赋值、浅拷贝、深拷贝的个人理解
2019/11/01 Javascript
node.js基础知识汇总
2020/08/25 Javascript
[50:27]Secret vs VG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python实现随机梯度下降(SGD)
2020/03/24 Python
python如何以表格形式打印输出的方法示例
2019/06/21 Python
Python实现个人微信号自动监控告警的示例
2019/07/03 Python
浅谈pycharm使用及设置方法
2019/09/09 Python
Django配置Bootstrap, js实现过程详解
2020/10/13 Python
美国在线鲜花速递:ProFlowers
2017/01/05 全球购物
美国药妆网站:EDCskincare.com(防晒、痤疮、抗衰老等)
2017/04/28 全球购物
新闻专业本科生的自我评价分享
2013/11/20 职场文书
致跳远运动员加油稿
2014/02/11 职场文书
《理想》教学反思
2014/02/17 职场文书
项目建议书模板
2014/05/12 职场文书
乡镇精神文明建设汇报材料
2014/08/15 职场文书
2014派出所所长群众路线对照检查材料思想汇报
2014/09/18 职场文书
学校教师师德师风承诺书
2015/04/28 职场文书
员工手册编写范本
2015/05/14 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书
2015年村级财务管理制度
2015/08/04 职场文书
大学生安全教育心得体会
2016/01/15 职场文书
MySQL优化常用的19种有效方法(推荐!)
2022/03/17 MySQL