1. 程式人生 > >配置防盜鏈、訪問控制Directory、FilesMatch

配置防盜鏈、訪問控制Directory、FilesMatch

Linux

配置防盜鏈

首先來了解一下什麽是盜鏈,全稱是盜取鏈接,假如我們的網站有很多好看的圖片,別人可以查看我們網站圖片的鏈接,然後應用在他的網站上,這樣的話,去訪問他的網站,實際上消耗的是我們的流量(因為實際鏈接在我們這裏),這樣我們就不得不去配置防盜鏈,使得別人不能復制我們圖片的鏈接。

防盜鏈的實現原理就不得不從HTTP協議說起,在HTTP協議中,有一個表頭字段叫referer,采用URL的格式來表示從哪兒鏈接到當前的網頁或文件。換句話說,通過referer,網站可以檢測目標網頁訪問的來源網頁,如果是資源文件,則可以跟蹤到顯示它的網頁地址。有了referer跟蹤來源就好辦了,這時就可以通過技術手段來進行處理,一旦檢測到來源不是本站即進行阻止或者返回指定的頁面。

如果想對自己的網站進行防盜鏈保護,則需要針對不同的情況進行區別對待。如果網站服務器用的是apache,那麽使用apache自帶的Url Rewrite功能可以很輕松地防止各種盜鏈,其原理是檢查refer,如果refer的信息來自其他網站則重定向到指定圖片或網頁上。

編輯虛擬主機配置文件
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

在配置文件中添加如下內容

<Directory /data/wwwroot/mm.com>
        SetEnvIfNoCase Referer "http://kjj.com"; local_ref
        SetEnvIfNoCase Referer "http://hnlbdz.com"; local_ref
        SetEnvIfNoCase Referer "^$" local_ref                            #表示空的Refer
        <filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)">
            Order Allow,Deny
            Allow from env=local_ref
        </filesmatch>
 </Directory>

技術分享圖片

Directory表示指定哪個目錄,我們設置防盜鏈肯定是針對本站點,所以直接寫站點。
SetEnv開頭的是referer的白名單
filesmatch開頭的指的後面這些格式的文件不設置白名單,(就是說針對這些文件做防盜鏈)
order定義訪問控制的,order定義順序,是先允許還是先拒絕。
allow一行的意思是把上面末尾帶有local_ref的白名單referer做一個允許。其他的使用上一行的order給deny掉

然後我們保存檢查錯誤,然後重啟。
/usr/local/apache2.4/bin/apachectl -t
/usr/local/apache2.4/bin/apachectl graceful

我們來做一個測試,測試一下kjj.com/ai.png瀏覽器看看能不能打開,或者把它以超鏈接的形式發到論壇,然後點開

出現如下情況就是空referer,就是防盜鏈起了作用:

技術分享圖片


訪問控制Directory

訪問控制Directory作用:限制白名單ip,只有允許的ip才能訪問。相當於再再加一層防護。因為公網ip是固定的,所以幫你可以把公司的ip放進去,這樣就只有公司的網絡才能訪問到。否則全部拒絕或限制。

編輯虛擬主機配置文件
vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf

在配置文件裏添加如下段,目的是對yy.com下的yang目錄進行訪問控制(我們把如上選中代碼復制到配置文件裏去,然後做一些改動,(因為我們剛剛設置防盜鏈的時候用到了Directory,所以我們要把它放在那個Directory的上面))

<Directory /data/wwwroot/yy.com/yang/>
        Order deny,allow
        Deny from all
        Allow from 192.168.71.131
     </Directory>

Order 用來定義順序 Order deny,allow 表示先deny 再allow
這段話表是拒絕所有的訪問,僅通過192.168.71.131

然後我們保存檢查錯誤,然後重啟。
/usr/local/apache2.4/bin/apachectl -t
/usr/local/apache2.4/bin/apachectl graceful

使用curl進行測試是否成功
curl -x192.168.71.131:80 mm.com/yang/index.php -I

使用192.168.71.131可以正常訪問,

curl -x192.168.71.132:80 111.com/yang/index.php -I

使用192.168.71.13無法訪問


訪問控制FilesMatch

上面訪問控制的是以目錄的形式,當然也是可以匹配一個文件名,或者說鏈接,有時候我們訪問的鏈接裏可能不是yang/,而是yang.php後面可能還跟了其他參數,那麽我們就可以用forbidden去匹配它。

對mm.com下的yang.php開頭頁面進行訪問控制,同樣在虛擬主機配置文件上添加如下段:

<Directory /data/wwwroot/mm.com>
         <FilesMatch  "yang.php(.*)">
           Order deny,allow
           Deny from all
           Allow from 192.168.71.131
         </FilesMatch>
</Directory>

然後我們保存檢查錯誤,然後重啟。(因為有特殊符號所以要加單引號)
/usr/local/apache2.4/bin/apachectl -t
/usr/local/apache2.4/bin/apachectl graceful

使用curl進行測試是否成功
curl -x192.168.71.132:80 mm.com/yang.php?=1=2 -I

顯示403 Forbidden

然後我們試試131的ip 雖然是這裏是404,因為這個網址是不存在的,如果存在就能訪問了。
curl -x192.168.71.131:80 ‘http:// mm.com/yang.php?alsjdflksajdflk‘ -I

配置防盜鏈、訪問控制Directory、FilesMatch