利用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%以上的盜鏈是沒有問題的哈,有時候不要太較真!!!