Discuz教程网

php中突破基于HTTP_REFERER的防盗链措施

[复制链接]
authicon dly 发表于 2011-4-14 14:21:38 | 显示全部楼层 |阅读模式
如果考虑突破防盗链的措施,就需要考虑在 HTTP_REFERER 上面做手脚了。很多网站是通过referer来判断是否盗链。
那么如果考虑突破防盗链的措施,就需要考虑在 HTTP_REFERER 上面做手脚了。PHP 脚本中对应的变量是 $_SERVER['HTTP_REFERER'] ,它存储了 HTTP_REFERER 的值。
由于直接访问目标 URL 资源已经被上述防盗链的措施给屏蔽,所以我们需要个类似网关的玩意去获取。说白了就是编写已经包装过的 HTTP 头的 PHP 脚本。
下面是简单的函数实现:
代码如下:

  1. function getRemoteFile($url, $refer = '') {
  2. $option = array(
  3. 'http' => array(
  4. 'header' => "Referer:$refer")
  5. );
  6. $context = stream_context_create($option);
  7. return file_get_contents($url, false, $context);
  8. }
复制代码


这是个比较简单的函数,其功能就是伪造 Referer (使用 stream_context_create 函数)然后获取对方的数据(使用 file_get_contents,需要开启 allow_url_fopen )。
如果想“复杂”一点,可以使用 sockets 扩展,这不在这里的讨论范围以内。
另外,再提供个获取主机名的正则函数

代码如下:

  1. function getHost($url) {
  2. $result = preg_match('/^http:\/\/([\d|\w|\.]+)\//', $url, $matches);
  3. if (sizeof($matches) >= 2) {
  4. return $matches[1];
  5. } else {
  6. return null;
  7. }
  8. }
复制代码

再进一步的扩展,可以封装成脚本,然后譬如调用
http://127.0.0.1/proxy.php?url=http://i.am/img就可以获取那些开启防盗链措施的链接了(再发挥下,使用 Javascript 将图片链接全部替换)。






上一篇:PHP的CURL库功能简介 抓取网页、POST数据及其他
下一篇:1314小微博
authicon 丁加丁 发表于 2011-5-7 22:59:51 | 显示全部楼层
好东西要顶的。
authicon 暗夜的烟火 发表于 2011-5-8 10:59:54 | 显示全部楼层
看帖必回
authicon 福倒菜菜子 发表于 2011-5-10 13:59:47 | 显示全部楼层
支持楼主,顶一下
authicon mjz 发表于 2011-5-21 10:53:08 | 显示全部楼层
哈哈,支持了
authicon 夕梨二世 发表于 2011-5-21 14:59:37 | 显示全部楼层
顶你一下,好贴要顶!
authicon 福倒菜菜子 发表于 2011-5-28 07:59:41 | 显示全部楼层
顶的就是你
authicon lanyuqing 发表于 2011-6-23 21:59:49 | 显示全部楼层
这个还是不错的!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-3 03:34

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表