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返回的內容中把主體信息截取下來另存爲圖片,則實現了圖片的防盜鏈