1. 程式人生 > >web防盜鏈原理及實戰

web防盜鏈原理及實戰

    盜鏈,簡單的說就是某些網站通過自身網站程式未經許可呼叫其他網站的資源,在自己網站上顯示這些資源。浪費了呼叫資源網站的網路流量,造成其他網站的頻寬及服務壓力吃緊,甚至宕機

  網站盜鏈會大量消耗被盜鏈網站的頻寬,而真正的點選率也許會很小,嚴重損害了被盜鏈網站的利益。早期的盜鏈一般是一些比較小的網站盜取一些有實力的大網站的地址,盜鏈的目標比較有針對性,現如今,一些大型的網站也已經開始把盜鏈的目光鎖定在了整個網際網路上,竊取整個網際網路上的其它機器的頻寬。常見的盜鏈有以下幾種:圖片盜鏈、音訊盜鏈、視訊盜鏈、檔案盜鏈。

常見的防盜鏈解決方案
1.根據http referer實現防盜鏈
   在HTTP協議中,有一個表頭欄位叫referer,使用URL格式來表示從哪裡來的連結到當前網頁的資源。也就是說通過
referer可以檢測到來源網頁的型別,

referer會記錄這一資訊,也就是說,伺服器可以根據referer來知道使用者和資源是從哪個網站請求進來的,

apache,nginx,lighttpd三者都支援根據http referer實現防盜鏈

2.根據cookie處理
3.通過加密變換訪問路徑實現防盜鏈
lighttpd類似外掛mod_secdownload

4.在圖片或視訊上新增水印

Apache通過referer實現防盜鏈

Apache通過rewrite模組實現防盜鏈,第一步啟用mod_rewrite模組

LoadModule rewrite_module modules/mod_rewrite.so

第二步:在虛擬主機中新增以下內容

    RewriteEngine on
    RewriteCond %{HTTP_REFERER} !^http://blog.king.org/.*$ [NC]
    RewriteCond %{HTTP_REFERER} !^http://blog.king.org$ [NC]
    RewriteCond %{HTTP_REFERER} !^http://www.king.org/.*$ [NC]
    RewriteCond %{HTTP_REFERER} !^http://www.king.org$ [NC]
    RewriteRule (.*)\.(png|jpg|swf|gif|)$ http://bbs.king.org/img/nolink.png [R,NC]

RewriteCond可以看作是if語句,如果來源網站不是http://blog.king.org/.* 或者www.king.org/.*,則執行RewriteRule裡面的規則,即跳轉到http://bbs.king.org/img/nolink.png這個頁面

**注意:http://bbs.king.org/img/nolink.png這個頁面不要和防盜鏈網站是一個網站,如果是一個網站內的圖片資源,我測試nolink.png是無法載入的,歡迎廣大網友批評指正。

nginx實現防盜鏈

location ~* \.(jpg|gif|png|swf|flv|wma|wmv|asf|mp3|mmf|zip|rar)$ {
valid_referers none blocked  *.baidu.com *.king.org;
if ($invalid_referer) {
  rewrite ^/ http://bbs.king.org/img/nolink.png;
    }

  }

如果請求的是jpg,gif,png等結尾的資源,那麼king.org 和baidu.com域名的網站均可以訪問,其他的來源網站則重寫到

http://bbs.king.org/img/nolink.png,

**注意:http://bbs.king.org/img/nolink.png這個頁面不要和防盜鏈網站是一個網站,如果是一個網站內的圖片資源,我測試nolink.png是無法載入的,歡迎廣大網友批評指正。

利用referer和rewrite實現apache防盜鏈小節
通過判斷referer的值來判斷圖片或資源引用是否合法,只有在根據配置配合設定需求範圍內的referer這樣的網站內容,才能
呼叫訪問指定的資源內容,從而實現了資源被網站盜鏈的目的。需要注意的是,不是所有的瀏覽器都會設定referer變數,
而且有的還可以手動修改referer,偽造referer.