PHP實現HTTP防盜鏈

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

相關文章
相關標籤/搜索