1. 程式人生 > >網站資源防盜鏈結構設計

網站資源防盜鏈結構設計

網站防盜鏈

標題索引


  • 追溯原因

  • 數據測試

  • 防盜結構


追溯原因

一步一印,有印為證,網站資源防盜鏈老生常談,但是如何才能確保網站資源如圖片等特殊資源不被盜鏈?這不僅僅是運維人員所考慮的問題,更是開發人員必須控制並解決的一個問題,但因爬蟲、瀏覽器插件和開發人員自行偽造http_referer等等技術原因,單純服務器端設置防盜鏈遠遠無法解決此問題,參考相關資料決定從架構的角度根本上解決防盜鏈(另外通過referer記錄請求資源從哪個網頁鏈接過來的,從而可統計百度推廣鏈接的次數等)。

數據測試

實驗目的:測試http攜帶referer時的條件

測試拓撲:見圖1-1

技術分享

圖1-1 測試拓撲

測試配置:服務器配置Nginx服務,在Nginx服務中配置兩站點,並在站點www.a.com中映射資源a.jpg,站點www.b.com盜鏈www.a.com中的a.jpg資源,具體配置如下:

[ root@server conf.d ]#pwd
/etc/nginx/conf.d
[ root@server conf.d ]#vim virtual.conf
 server {
     listen 80;
     index index.html;
     server_name www.a.com;
     root /app/website01/;
     location /admin {    
             return 403 
              }
 } 
 server {
     listen 80;
     index index.html;
     server_name www.b.com;
     root /app/website02/;
     location /admin { 
             return 403           
     }
 }
 [ root@server ~ ]#mkdir /app/website01
 [ root@server ~ ]#echo "Welcome to website01" > /app/website01/index.html
 [ root@server ~ ]#cp /data/picture/a.jpg /app/website01/
 [ root@server ~ ]#mkdir /app/website02
 [ root@server ~ ]#echo "Welcome to website02" > /app/website02/index.html
 [ root@server ~ ]#echo "<img src=http://www.a.com/a.jpg" >> /app/website02/index.html

測試方1戶端直接訪問www.b.com/a.jpg資源,測試結果為請求報頭中無referer信息,具體見圖1-2

技術分享

圖1-2 客戶端直接請求資源抓包分析圖

測試方法2客戶端訪問www.a.com資源,然後通過www.a.com中的鏈接文件進入www.b.com網站,測試結果為請求包頭中有referer信息,表明盜鏈地址來源,見圖1-3


技術分享

圖1-3:客戶端盜鏈網站資源抓包分析圖

測試說明:以如下方式瀏覽在http請求報文頭部中無referer信息

1.用戶直接輸入網站,http請求報文中無referer信息;
2.通過瀏覽器插件,修改referer後,http請求報文無referer信息;
3.通過https跳轉至http中,http請求報文無referer信息。

防盜結構

根據上述測試可知,用戶在盜鏈時可以http頭部攜帶referer參數,因此在防盜鏈時總體設計思路如下:

1.服務器端開啟有效referer請求配置,非有效referer則返回錯誤403或錯誤404狀態碼;

2.服務器端設置有效referer後,防止客戶端偽造有效referer,如網站運行百度推廣或通過百度打開企業網站,因 此企業web搭建時將www.baidu.com列如有效referer,故客戶端偽造www.baidu.com的referer進行盜鏈。

3.防盜鏈技術層次采用,服務器A為圖片服務器,服務器B為對外服務器,服務器B調用圖片時,再次盜鏈圖片服務器A,因此當其他外網web服務器盜鏈本企業服務器Bweb的資源時,最多只能copy粘貼文字,而不能講企業內部服務器A資源圖片進行盜鏈。

總上上述防盜鏈設計思路,設計網站結構如下,也是當下互聯網企業常用技術方案之一,Web服務器資源動靜分離,圖片采用獨立的分布式存儲。拓撲圖如下:

技術分享

圖1-4:Web防盜鏈結構設計

當然對外服務器端需配合http_referer_module更加安全可靠, 具體配置可參考如下:

[ root@server conf.d ]#vim virtual.conf
 server {
     listen 80;
     index index.html;
     server_name www.a.com;
     root /app/website01/;
     location / {
     valid_referers none blocked server_names
               #通配符,只要滿足如下通配符即可
               *.a.com example.*  www.a.com
               #正則表達式,定義模式\.baidu\.只要匹配此模式就允許通過 
               ~\.baidu\.;
     if ($invalid_referer) {
               return 403;
              }
     }
     location /admin {    
             return 403 
              }
     }

本文出自 “一步一印,有印為證” 博客,謝絕轉載!

網站資源防盜鏈結構設計