1. 程式人生 > >防盜鏈實現

防盜鏈實現

定向 httpd acc 子域 tac 返回 理解 如果 link

百度百科對防盜鏈的定義是

此內容不在自己服務器上,而通過技術手段,繞過別人放廣告有利益的最終頁,直接在自己的有廣告有利益的頁面上向最終用戶提供此內容。 常常是一些名不見經傳的小網站來盜取一些有實力的大網站的地址(比如一些音樂、圖片、軟件的下載地址)然後放置在自己的網站中,通過這種方法盜取大網站的空間和流量。

這段話理解起來很生澀,舉個例子:有時候我們從一個網站,比如騰訊,轉載了一篇文章到自己的博客或空間,發現一些圖片顯示不了,這就是防盜鏈在起作用。圖片是放在騰訊的服務器上的,騰訊拒絕其它網站的頁面訪問該資源。

一般情況下,當我們瀏覽一個網頁時,並不是一次請求就會把整個頁面的內容傳到本地瀏覽器,尤其是當這個頁面帶有圖片或者其它資源。第一次請求會傳回該頁面的HTML文本,瀏覽器解析該文本發現還有圖片,會發送第二次請求,請求獲得圖片。盜鏈問題是:如果一個網站沒有頁面中所說的資源,它就會把這個圖片鏈接到別的網站,這樣沒有任何資源的網站利用了別的網站的資源來展示給瀏覽者,提高了自己的訪問量,而大部分瀏覽者又不會很容易地發現,這樣顯然,對於那個被利用了資源的網站是不公平的。一些不良網站為了不增加成本而擴充自己站點內容,經常盜用其他網站的鏈接。一方面損害了原網站的合法利益,另一方面又加重了服務器的負擔。

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

Nginx防盜鏈的配置

  1、nginx針對文件類型的防盜鏈配置方法:

  location ~* \.(gif|jpg|png|swf|flv|bmp)$ {

  valid_referers none blocked *.php100.com php100.com;

  if ($invalid_referer) {

  #rewrite ^/ http://www.php100.com/403.html;

  return 403;

  }

  }

  這種方法是在server或者location段中加入:valid_referers none blocked,其中none表示空的來路,也就是直接訪問,比如直接在瀏覽器打開一個文件,blocked表示被防火墻標記過的來路,*.php100.com表示所有子域名。

  2、nginx針對文件目錄的防盜鏈配置方法:

  location /img/ {

  root /data/img/;

  valid_referers none blocked *.php100.com php100.com;

  if ($invalid_referer) {

  rewrite ^/ http://www.php100.com/error.gif;

  #return 403;

  }

  }

  Apache防盜鏈的配置

  Apache 防盜鏈的第一種實現方法,可以用 Rewrite 實現。首先要確認 Apache 的 rewrite module 可用:能夠控制 Apache httpd.conf 文件的,打開 httpd.conf,確保有這麽一行配置:

  LoadModule rewrite_module modules/mod_rewrite.so

  然後在相應虛擬主機配置的地方,加入下列代碼:

  ServerName www.php100.com

  # 防盜鏈配置 參數

  RewriteEngine On

  RewriteCond %{HTTP_REFERER} !^http://php100.com/.*$ [NC]

  RewriteCond %{HTTP_REFERER} !^http://php100.com$ [NC]

  RewriteCond %{HTTP_REFERER} !^http://www.php100.com/.*$ [NC]

  RewriteCond %{HTTP_REFERER} !^http://www.php100.com$ [NC]

  RewriteRule .*\.(gif|jpg|swf)$ http://www.php100.com/img/nolink.gif [R,NC]

  php100.com/www.php100.com 表示自己的信任站點。gif|jpg|swf 表示要保護文件的擴展名(以|分開)。nolink.gif 盜鏈後的重定向頁面/圖片。用以輸出警示信息,這張圖片應該盡可能的小。

  有些用戶使用的是虛擬主機,沒有服務器的控制權,無法修改 httpd.conf 文件和重啟服務器。那麽請確認你的虛擬主機支持 .htaccess,將上面的配置寫入 .htaccess 文件,放入根目錄或圖片所在的目錄即可:

  # 防盜鏈配置

  RewriteEngine On

  RewriteCond %{HTTP_REFERER} !^http://php100.com/.*$ [NC]

  RewriteCond %{HTTP_REFERER} !^http://php100.com$ [NC]

  RewriteCond %{HTTP_REFERER} !^http://www.php100.com/.*$ [NC]

  RewriteCond %{HTTP_REFERER} !^http://www.php100.com$ [NC]

  RewriteRule .*\.(gif|jpg|swf)$ http://www.php100.com/img/nolink.gif [R,NC]

  通過判斷referer變量的值,判斷圖片或資源的引用是否合法,只有在設定範圍內的 referer,才能訪問指定的資源,從而實現了防盜鏈(Anti-Leech)的目的。需要指出的是:不是所有的用戶代理(瀏覽器)都會設置 referer 變量,而且有的還可以手工修改 referer,也就是說,referer 是可以被偽造的。本文所講的,只是一種簡單的防護手段。當然,應付一般的盜鏈也足夠了。

防盜鏈實現