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 运行效率总结(提示程序速度)
Nov 26 PHP
PHP Session_Regenerate_ID函数双释放内存破坏漏洞
Jan 27 PHP
PHP的SQL注入实现(测试代码安全不错)
Feb 27 PHP
PHP 中关于ord($str)>0x80的详细说明
Sep 23 PHP
解析argc argv在php中的应用
Jun 24 PHP
destoon二次开发入门示例
Jun 20 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
Sep 27 PHP
PHP动态柱状图实现方法
Mar 30 PHP
php网页版聊天软件实现代码
Aug 12 PHP
mac系统下为 php 添加 pcntl 扩展
Aug 28 PHP
Yii2.0多文件上传实例说明
Jul 24 PHP
PHP判断当前使用的是什么浏览器(推荐)
Oct 27 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数组最大值,最小值的代码
2011/10/31 PHP
php获取汉字拼音首字母的方法
2015/10/21 PHP
thinkphp框架实现数据添加和显示功能
2016/06/29 PHP
json2.js的初步学习与了解
2011/10/06 Javascript
Javascript绝句欣赏 一些经典的js代码
2012/02/22 Javascript
js 时间函数应用加、减、比较、格式转换的示例代码
2013/08/23 Javascript
javascript类型转换示例
2014/04/29 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
2014/10/21 Javascript
Javascript实现禁止输入中文或英文的例子
2014/12/09 Javascript
完美兼容IE,chrome,ff的设为首页、加入收藏及保存到桌面js代码
2014/12/17 Javascript
一款简单的jQuery图片标注效果附源码下载
2016/03/22 Javascript
Javascript Event(事件)的传播与冒泡
2017/01/23 Javascript
selenium 与 chrome 进行qq登录并发邮件操作实例详解
2017/04/06 Javascript
jQuery制作input提示内容(兼容IE8以上)
2017/07/05 jQuery
js取小数点后两位四种方法
2019/01/18 Javascript
Vue数据绑定简析小结
2019/05/07 Javascript
Python对象的深拷贝和浅拷贝详解
2014/08/25 Python
你真的了解Python的random模块吗?
2017/12/12 Python
Python实现霍夫圆和椭圆变换代码详解
2018/01/12 Python
pandas 使用apply同时处理两列数据的方法
2018/04/20 Python
python多线程之事件Event的使用详解
2018/04/27 Python
python中退出多层循环的方法
2018/11/27 Python
使用CodeMirror实现Python3在线编辑器的示例代码
2019/01/14 Python
python被修饰的函数消失问题解决(基于wraps函数)
2019/11/04 Python
解决django model修改添加字段报错的问题
2019/11/18 Python
python实现单机五子棋
2020/08/28 Python
化工工艺专业求职信
2013/09/22 职场文书
新入职员工的自我介绍演讲稿
2014/01/02 职场文书
分居协议书范本
2014/11/03 职场文书
高考升学宴答谢词
2015/01/20 职场文书
停电调休通知
2015/04/16 职场文书
工程款催款函
2015/06/24 职场文书
《灰雀》教学反思
2016/02/19 职场文书
解析:创业计划书和商业计划书二者之间到底有什么区别
2019/08/14 职场文书
Python selenium模拟网页点击爬虫交管12123违章数据
2021/05/26 Python
MYSQL 表的全面总结
2021/11/11 MySQL