寶塔Nginx配置防盜鏈


Nginx配置防盜鏈

1.什么是資源盜鏈

簡單地說,就是某些不法網站未經許可,通過在其自身網站程序里非法調用其他網站的資源,然后在自己的網站上顯示這些調用的資源,達到填充自身網站的效果。這一舉動不僅浪費了調用資源網站的網絡流量,還造成其他網站的帶寬及服務壓力吃緊,甚至宕機。

 2.網站資源被盜鏈帶來的問題

若網站圖片及相關資源被盜鏈,最直接的影響就是網絡帶寬占用加大了,帶寬費用多了,網絡流量也可能忽高忽低,Nagios/Zabbix等報警服務頻繁報警

最嚴重的情況就是網站的資源被非法使用,使網站帶寬成本加大和服務器壓力加大,這有可能導致數萬元的損失,且網站的正常用戶訪問也會受到影響

3.企業真實案例:網站資源被盜鏈,出現嚴重問題

某日,接到從事運維工作的朋友的緊急求助,其公司的CDN源站,源站的流量沒有變動,但CDN加速那邊的流量無故超了好幾個GB,不知道怎么處理。

該故障的影響:由於是購買的CDN網站加速服務,因此雖然流量多了幾個GB,但是業務未受影響。只是,這么大的異常流量,持續下去可直接導致公司無故損失數萬元。解決這個問題可體現運維的價值。

4.常見防盜鏈解決方案的基本原理

(1)根據HTTP referer實現防盜鏈

在HTTP協議中,有一個表頭字段叫referer,使用URL格式來表示是哪里的鏈接用了當前網頁的資源。通過referer可以檢測訪問的來源網頁,如果是資源文件,可以跟蹤到顯示它的網頁地址,一旦檢測出來源不是本站,馬上進行阻止或返回指定的頁面。

HTTP referer是header的一部分,當瀏覽器向Web服務器發送請求時,一般會帶上referer,告訴服務器我是從哪個頁面鏈接過來的,服務器借此獲得一些信息用於處理。Apache、Nginx、Lighttpd三者都支持根據HTTP referer實現防盜鏈,referer是目前網站圖片、附件、html等最常用的防盜鏈手段

(2)根據cookie防盜鏈

對於一些特殊的業務數據,例如流媒體應用通過ActiveX顯示的內容(例如,Flash、Windows Media視頻、流媒體的RTSP協議等),因為它們不向服務器提供referer header,所以若采用上述的referer的防盜鏈手段,就達不到想要的效果。

對於Flash、Windows Media視頻這種占用流量較大的業務數據,防盜鏈是比較困難的,此時可以采用Cookie技術,解決Flash、Windows Media視頻等的防盜鏈問題。

例如:ActiveX插件不傳遞referer,但會傳遞Cookie,可以在顯示ActiveX的頁面的<head></head>標簽內嵌入一段JavaScript代碼,設置“Cookie:Cache=av”如下:

<script> document.cookie="Cache=av;

domain=domain.com;

path=/";

 </script>

然后就可以通過各種手段來判斷這個Cookie的存在,以及驗證其值的操作了。

根據Cookie來防盜鏈的技術非本書的內容,讀者了解即可,如果企業確實有需要,可以閱讀其他書籍或進入交流群獲取這部分的知識。

(3)通過加密變換訪問路徑實現防盜鏈

此種方法比較適合視頻及下載類業務數據的網站。例如:Lighttpd有類似的插件mod_secdownload來實現此功能。先在服務器端配置此模塊,設置一個固定用於加密的字符串,比如oldboy,然后設置一個url前綴,比如/mp4/,再設置一個過期時間,比如1小時,然后寫一段PHP代碼,利用加密字符串和系統時間等通過md5算法生成一個加密字符串。最終獲取到的文件的URL鏈接中會帶有一個時間戳和一個加密字符的md5數值,在訪問時系統會對這兩個數據進行驗證。如果時間不在預期的時間段內(如1小時內)則失效;如果時間戳符合條件,但是加密的字符串不符合條件也會失效,從而達到防盜鏈的效果。

<php
$secret = "oldboy";
     // 加密字符串,必須和
lighttpd.conf里的保持一致
$uri_prefix = "/mp4/";
     // 虛擬的路徑、前綴,必須和
lighttpd.conf里的保持一致
$file = "/test.mp4";
     // 實際文件名,必須加
"/"斜杠
$timestamp = time();
     // current timestamp
$t_hex = sprintf(
"%08x",
 $timestamp);
$m = md5(
$secret.$file.$t_hex);
printf(
'%s',
 $uri_prefix,
 $m,
 $t_hex,
 $file,
 $file);
     //生成
url地址串
>

Nginx Web服務實現防盜鏈實戰

在默認情況下,只需要進行簡單的配置,即可實現防盜鏈處理

利用referer,並且針對擴展名rewrite重定向

第一步

第二步

第三步

相關配置

配置前


    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires      30d;
        error_log off;
        access_log /dev/null;
    }



配置后


	location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
 valid_referers *.heian99.top heian99.top;
 if ($invalid_referer) {
  rewrite ^/ https://ftp.bmp.ovh/imgs/2020/06/75d45131a596abbd.jpg;
  #return 404;
 }
 expires  30d;
}


效果圖

打開這個圖片,放到別的瀏覽器查看

就會變成下面這個圖片了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM