1. 程式人生 > >利用apache偽靜態技術防止盜鏈

利用apache偽靜態技術防止盜鏈

(在我們製作網站的過程中,可能會遇到這樣的問題,就是其他的網站直接盜用了我們網站的圖片或css或js,這樣可能會大大增加我們自己網站的負載。

所以,我們應該考慮一下怎樣防止這樣的事情發生。)

下面我們來模擬一個防盜鏈的情況:

比如我們的網站下面有一個publicimage目錄和一個privateimage目錄,其中publicimage目錄可以讓別人訪問,而privateimage目錄只能自己訪問。

我們應該怎樣去實現呢?

我們能想到的方法是:利用apache偽靜態技術完成,那應該怎樣去做了,下面我們介紹兩種方式:

(apache虛擬主機域名的配置,以及rewrite元件的開啟和".htaccess"檔案配置我這裡就不說了,大家可以到網上搜索,這些東西不是很難哈。)

第一種方式,修改.htaccess檔案配置(.htaccess檔案是分別放在publicimage和privateimage資料夾下哈)

在privateimage資料夾中的.htaccess檔案中寫入:

 

Order deny, allow

 

deny from all

 

allow from 127.0.0.1

以上程式碼表示,先檢視deny,在檢視allow

決絕所有的訪問,但是允許本地訪問。

咋一看我們似乎是解決了我們上面說過的問題,但是這樣的設定有一個bug,就是比如我們本地的apache配置了兩個域名分別為:www.panchao.com和www.test.com。而需要控制的上面兩個資料夾存在於www.panchao.com這個域名下,但是就上面的.htaccess規則來說,我們使用www.test.com域名去訪問privateimage資料夾中的圖片也是沒問題的。這就和我們的想法相悖了,我們希望只有www.panchao.com這個域名能夠訪問privateimage資料夾下的圖片。由此我們引出了第二種防盜鏈方式。

第二種方式,也是修改.htaccess檔案配置,但和第一種方式的配置很不一樣。

在privateimage資料夾中的.htaccess檔案中寫入:

<ifModule rewrite_module>

RewriteEngine On

#我們怎麼知道,請求就是www.panchao.com發來的呢? 使用 http的 referer頭資訊

#如果你請求的是一個jpg圖片, 就禁止

RewriteCond %{HTTP_REFERER} !www.panchao.com 

RewriteRule .*\.jpg -[F]

</ifModule>

以上程式碼代表的意思就是:

首先是rewrite引擎開啟

然後,我們判斷髮出請求的HTTP_REFERER是不是www.panchao.com,如果不是,那麼訪問.jpg檔案的請求就被禁止。

tips:雖然上面的技術能夠實現防盜鏈,但是這些東西歸根結底是人寫出來的,如果有人就是想盜鏈,比如他修改了請求的HTTP_REFERER,還是能夠進行盜鏈的,這就需要我們在處理這些問題的時候想的更周全一點。

但是,我覺得,如果我們做到了上面的設定,防止90%以上的盜鏈是沒有問題的哈,有時候不要太較真!!!