當前位置:首頁 > 網站建設

如何從技術上“絞殺”盜鏈者?

時間:2019-11-03 16:40:00來源:網站建設作者:seo實驗室小編閱讀:66次「手機版」
 

絞殺

聲明:本文來自于微信公眾號 CSDN(ID:CSDNnews),作者:阿文,授權站長之家轉載發布。

很多站長都會遇到一個很頭疼的問題,那就是自己網站資源經常被盜用,有文字、圖片、視頻、和二進制或壓縮文件,這些資源被盜用后除了導致網站流量丟失之外、還會帶來一些經濟上的損失。

除了相關法律,例如《中華人民共和國著作權法》可以使版權或著作權所有者通過法律途徑來約束和限制一些未經授權非法使用網站多媒體資源,我們還可以通過一些技術手段來約束訪問者,使其無法隨意盜取相關資源,下面我們就介紹下網站常用的防盜措施和其優勢和劣勢。

User-agent 防盜

User-Agent 首部包含了一個特征字符串,用來讓網絡協議的對端來識別發起請求的用戶代理軟件的應用類型、操作系統、軟件開發商以及版本號。不同的瀏覽器客戶端都會攜帶自己的 user-agent,例如 Chrome 瀏覽器的 user-agent 是:

user-agent:Mozilla/5.0(Macintosh;IntelMacOSX10_14_5)APPleWebKit/537.36(KHTML,likeGecko)Chrome/75.0.3770.90Safari/537.36

在比如 curl 命令去訪問一個 url,其帶的 user-agent 如下:

User-Agent:curl/7.54.0

亦或者使用一些編程語言的庫,例如 Pythonrequest 庫,其 user-agent 為:

r.request.headers{'User-Agent':'python-requests/2.18.4',……}

既然如此,我們可以限制一些 user-agent 的請求,以 nginx 為例,我們判斷 httpuseragent 來禁止其訪問資源。例如下面的,如果 user-agent 等于 java|python-urllib 等就返回 403,從而來拒絕這些客戶端訪問資源。

if($http_user_agent~"Mozilla/4.0$|Mozilla/5.0$|Java|ApacheBench|Python-urllib|^$"){return403;}

但是這種辦法并不能完全禁止掉一些請求,因為 user-agent 是客戶定義的,以 curl 為例,如下所示。通過 -H 指定 user-agent 的請求頭信息,如果對方恰好指定你的黑名單規則,則可以很輕松的繞過限制。

curl-H"User-Agent:xxxx"

referer 防盜鏈

Referer 首部包含了當前請求頁面的來源頁面的地址,即表示當前頁面是通過此來源頁面里的鏈接進入的。如下所示的 request headers 中,其 referer 為https://www.Google.com/ 則說明其來源是谷歌

:authority:developer.mozilla.org:method:GET:path:/zhCN/docs/Web/HTTP/Headers/Referer:scheme:httpsaccept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3 accept-encoding: gzip, deflate, br accept-language: zh-CN,zh;q=0.9,en;q=0.8 cookie: dwf_sg_task_completion=False dnt: 1 referer: https://www.google.com/ upgrade-insecure-requests: 1 user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36

以 nginx 為例,我們可以對指定域名的 referer 進行限制:

if($http_referer~*www.xxx.com){return403;}

但是這種辦法也并不能完全禁止掉一些域名請求,因為 referer 客戶也是可以自定義的。以 curl 為例,如下所示,通過 -H 指定 referer:XXXXX 的請求頭信息,就可以很輕松的繞過限制。

curl-H"referer:http://www.baidu.com"

IP 防盜鏈

顧名思義,即對指定 IP 或 IP 段進行限制訪問。例如一些爬蟲經常頻繁爬取網站資源,我們可以對其 IP 進行限制。

以 nginx 為例,nginx 的ngxhttpaccess_module 模塊可以用來設置允許/禁止哪些IP或IP段訪問:

allow 1.1.1.1/24 # 允許IP段訪問

deny all # 禁止所有 IP 訪問

token 防盜鏈

上述的三種原生 HTTP 首部字段都能防止用戶隨意盜取資源,但是其劣勢相當明顯,比如都極容易被偽造。

以 nginx 為例安裝secure_link模塊,默認是沒有安裝的,要使用這個模塊必須在編譯時指定下列編譯參數:

--with-http_secure_link_module

secure link 防盜鏈原理:

用戶訪問資源;

服務器根據secret密鑰、過期時間、文件uri生成加密串;

將加密串與過期時間作為參數跟到文件下載地址的后面;

nginx下載服務器接收到了過期時間,也使用過期時間、配置里密鑰、文件uri生成加密串;

將用戶傳進來的加密串與自己生成的加密串進行對比,一致允許下載,不一致403。

具體的配置和使用可以參考:

https://nginx.org/en/docs/http/ngxhttpsecurelinkmodule.html。

當然除了這種方式,你也可以使用 nginx lua 來自行實現一些自定義的防盜鏈措施。

【End】

相關閱讀

HTTP之防盜鏈

很多時候別人直接把我們的網站的資源拿去在他們網站展示,但是消費的是我們的流量,為了解決這種問題,才會有防盜鏈這個思路 這

我來教你玩轉iis防盜鏈 MYIIS-VIF超級防盜鏈

超級防盜鏈為何要防盜鏈? 您懂的,尊重知識產權,站長辛辛苦苦,熬更趕夜弄出來的資源,就別其他站點無情的采集走。。。著實心疼。順帶提

分享到:

欄目導航

推薦閱讀

熱門閱讀

七星彩论坛