码迷,mamicode.com
首页 > Web开发 > 详细

PHP实现HTTP防盗链

时间:2015-02-05 10:55:38      阅读:342      评论:0      收藏:0      [点我收藏+]

标签:

PHP实现HTTP防盗链

2015-01-25 下午 15:00

我们优化服务器时,有时为了尽量减少本站点的流量,从而防止外部站点盗用引用本站图片等资源。

具体具体步骤:

(1):在http.conf中打开Apache重写模块mod_rewrite.ko

技术分享

(2):在需要防盗链的网站或者目录下写.htaccess文件并指定防盗链规则。

RewriteEngine On????????????????????????????????//开启重写模块

RewriteBase /foruser/HTTP/????????????????????//生效目录

RewriteCond %{REQUEST_FILENAME} .*\.(jpg|jpeg|gif|png) [NC]????

//匹配所有图片

RewriteCond %{HTTP_REFERER} !localhost [NC]

//匹配HTTP_REFERER是否为localhost,不是时生效

RewriteRule .* noadmit.png????????????????//将png图片作为重写文件

技术分享

原理:若检测到网站不符合我们写的规则时,无论外部站点请求任何图片,均会被服务器重写为我们制定的图片,从而达到防盗链目的。

?

具体实验:

首先我们编写 rewrite.html 放在我们服务器的/foruser/HTTP/目录下

<html>

????<head>

????<title>重写</title>

????</head>

?

????<body>

????????<img src="./hello.png">

????</body>

<html>

技术分享

然后我们分别用

http://localhost/foruser/HTTP/rewrite.html

http://127.0.0.1/foruser/HTTP/rewrite.html

两个网址来调用我们刚编写的rewrite.html,由于我们的规则中有规定必须是localhost 才符合规则,故第二个网址127.0.0.1则不符合我们的规则,我们分别调用的结果如下

使用http://localhost/foruser/HTTP/rewrite.html则正常显示图片

技术分享

?

而使用http://127.0.0.1/foruser/HTTP/rewrite.html

显示的则是我们的防盗链制定的图片

技术分享

?

?

?

反盗链原理

既然服务器使用HTTP_REFERER来匹配进行反防盗链,我们可以顺着这条线来进行反防盗链,即我们伪造HTTP_REFERER成服务器需要的信息,原理就是:服务器需要什么,我们则伪造什么。

?

反防盗链php referrer.php内容如下

<?php

require(‘./http.class.php‘);//此类为上一篇日志的 php实现的http类

?

$http = new Http(‘http://localhost/foruser/HTTP/hello.png‘);

?

????//我们伪造服务器需要的头信息Referer

$http->setHeader("HTTP_REFERER: http://localhost");

?

$res = $http->get();

echo $res;

????//将图片信息截图保存下来

file_put_contents(‘./a.png‘,substr(strstr($res,‘\r\n\r\n‘),4));

?>

?

如图下图所示,我们只需要将http返回的内容中把主体信息截取下来另存为图片,则实现了图片的防盗链

技术分享

?

?

?

?

?

?

?

PHP实现HTTP防盗链

标签:

原文地址:http://www.cnblogs.com/lihaiyan/p/4274148.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!