網站的防盜鏈系統是如何做的?

 

http://www.chinaitpower.com/Dev/Web/site/index.html

防盜鏈原理:

  http標準協議中有專門的字段記錄referer

  一來可以追溯上一個入站地址是什麼

  二來對於資源文件,可以跟蹤到包含顯示他的網頁地址是什麼。

  因此所有防盜鏈方法都是基於這個Referer字段

  網上比較多的2種

  一種是使用apache文件FileMatch限制,在httpd.conf中增加 ( 其實也可以將把下面的語句存成一個.htaccess文件),並放到你的網站的根目錄(就是www/html目錄),這樣子別人就沒有辦法盜連你的東東了~~

  SetEnvIfNoCase Referer "^http://yahoo.com/" local_ref=1

  Order Allow,Deny

  Allow from env=local_ref

  Allow from 127.0.0.1

  這種很方便禁止非允許訪問URL引用各種資源文件

  請大家注意,把第一句"^http://yahoo.com/"改爲你的網站,比如我的網站是: http://www.linji.cn

  我應該這麼寫的

  "^http://www.linji.cn/"

  第二種是使用rewrite,需要增加apache的mode_rewrite,支持.htaccess文件目錄權限限制

  在虛擬主機根目錄增加.htaccess文件,描述從定向,把非本地地址refer的圖片文件都從定向到警告圖片或者警告網頁上。

  首先要確認你的服務器或空間的服務器解譯引擎爲Apache2,還有支持.htaccess客戶設置文件,

  如果你有自己的服務器就請先對./conf/httpd.conf 文件做以下修改

  找到:#LoadModule rewrite_module modules/mod_rewrite.so

  把前面的 # 給去丟

  找到等一個 AllowOverride None 改爲 AllowOverride All

  重啓Apache2服務器

  接下就是做一個 .htaccess 文件了,其 .htaccess 文件內容爲

  RewriteEngine on

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

  RewriteCond %{HTTP_REFERER} !^http://aaoo.net$ [NC]

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

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

  RewriteRule .*.(jpg|jpeg|gif|png|bmp|rar|zip|exe)$ http://down.yoyo.com.ru/err.html [R,NC]

  其中有色的地方都是要改爲你的:

  紅色:就是改爲你提供下載頁面的地址,也就是隻有通過這個地址纔可以下載你所提供的東東。

  藍色:就是要保護文件的擴展名(以|分開),也就是說以這些爲擴展名的文件只有通過紅色的地址纔可以訪問。

  綠色:如果不是通過紅色的地址訪問藍色這些爲擴展名的文件時就回重定向到綠色地址上。

  這個方法有個好處是,不同的虛擬主機用不同的描述定義。

  接下就是怎麼用 .htaccess 文件來實現防盜鏈了。

  首先要在空間上建兩個目錄(當然目錄名隨你),一個爲 web 另一個爲 down ,

  web 是用來放下載頁面的(或下載程序),down 當然就是放你提供的東東的啦,

  把 .htaccess 文件的紅色部分改一下,改爲http://你的域名/web。藍色部分

  改爲你要保護文件的擴展名。綠色部分改爲http://你的域名/web。改後保存

  .htaccess 文件把它上傳到 down 目錄。

  還有第三種:

  我在解決plog禁止盜鏈的時候,發現個問題,也算個好方法。

  plog把所有資源都自己管理起來,用resserver.php來動態顯示,這樣統一的入口方便添加權限操作。

  同時造成上面2種方法無法使用,因爲不再是apache直接訪問資源文件,而是php通過文件讀取。

  因此只能在代碼中做手腳:在讀取資源文件輸出之前,加如下判斷代碼

  引用

  $referer = $_SERVER['HTTP_REFERER'];

  $selfurl = $_SERVER['HTTP_HOST'];

  if(false == strpos($referer,$selfurl))

  {

  echo '非法盜鏈!';

  exit(1);

  }

  這裏有些偷懶,直接看引用地址中是否包含host地址,不過原理就是這樣,判斷referer是否是本站地址。

  我們常常在下載的時候,也碰到盜鏈網站無法下載,報盜鏈的問題。要下載這類文件最簡單的方法就是改referer

  比方flashget中,網址下面的"引用"一欄中,直接填寫下載地址就可以了。

發佈了30 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章