PHP实现HTTP防盗链 php
2015-01-25 下午 15:00 html
咱们优化服务器时,有时为了尽可能减小本站点的流量,从而防止外部站点盗用引用本站图片等资源。 服务器
具体具体步骤: 优化
(1):在http.conf中打开Apache重写模块mod_rewrite.ko 网站
(2):在须要防盗链的网站或者目录下写.htaccess文件并指定防盗链规则。 ui
RewriteEngine On //开启重写模块 spa
RewriteBase /foruser/HTTP/ //生效目录 日志
RewriteCond %{REQUEST_FILENAME} .*\.(jpg|jpeg|gif|png) [NC] htm
//匹配全部图片 blog
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返回的内容中把主体信息截取下来另存为图片,则实现了图片的防盗链