聊一聊防盜鏈

場景

最近公司項目需求中涉及到需要引用微信朋友圈中的圖片資源,結果被騰訊的防盜鏈系統攔截,所有的圖片都變成了令人尷尬的模樣。今天咱們討論的主題即看我如何習得化解之法


防盜鏈效果圖
防盜鏈效果圖

防盜鏈

盜鏈是指未經資源代理站點許可而擅自引用其資源。防盜鏈就是這些資源代理站點,為了避免盜鏈行為而采取的一種很常見的屏蔽措施,我們這里主要討論圖片方面的防盜鏈及相關的解決方案

成功引起注意

當時近距離遇到防盜鏈:這么神奇,這是怎么實現的?

隨即chromeF12->開發(fā)者工具,取出顯示成防盜鏈樣式的圖片URL,發(fā)現和源鏈接沒有區(qū)別。新開一個tab,Ctrl+V->Enter,什么鬼?能正常顯示??!騰訊真nb?能知道我是直接瀏覽器打開而不是偷偷塞到img標簽的src?

直覺告訴我,肯定兩種方式發(fā)送的請求圖片的Request Header有區(qū)別

分析

反手就是一個F12,首先是有防盜鏈現象的圖片的請求信息

防盜鏈請求頭

再反手又是一個new tab,鍵入圖片url,F12
新開窗口請求

這樣對比看的話就很清楚了,兩者不同之處再Request Headers里面的Referer請求頭,關于Referer,引用MDN的解釋:

The Referer request header contains the address of the previous web page from which a link to the currently requested page was followed. The Referer header allows servers to identify where people are visiting them from and may use that data for analytics, logging, or optimized caching, for example.

大概意思就是說Referer包含請求發(fā)起者的URL,這樣騰訊方就可以拿到請求源相關信息,然后根據請求源URL來進行判斷校驗,這樣就可以知道請求方是否在盜鏈

不過如此,哈哈哈...



但是,怎么破?絕望。。。


解決方案

目前常用方法無外乎兩種,第一種是通過第三方跳板服務:
這些服務一般多是通過后端代理的方式暴露出跳板api,使用方在調用時通過傳參的方式將要請求的url傳到代理服務器,代理服務器作為中間方再去請求騰訊資源代理服務器的圖片資源,拿到資源后返還給調用方,之前有一些穩(wěn)定的跳板服務,比如QQ瀏覽器(一家人應該不會有問題)提供的

http://read.html5.qq.com/image?src=forum&q=5&r=0&imgflag=7&imageUrl=

在上述鏈接后面給出原始圖片的url,然后就可以坐等QQ跳板服務為我們取回想要的圖片

然鵝。。。


QQ瀏覽器也加了防盜鏈校驗

果然是一家人。。。
只能嘗試第二種方式了

第二種方案就是讓瀏覽器發(fā)圖片請求時,請求頭不帶上Referer頭信息。像這種控制代理動作,一般通過meta標簽來進行設置,最終在meta找到了想要的

referrer controlling the content of the HTTP Referer HTTP header attached to any request sent from this document:

referrer取值

參考上面的取值含義,我們只需要在所需頁面的<head>中加上:

<meta name="referrer" content="no-referrer" />

效果圖



Referer沒了,圖片也正常顯示了[手動滑稽笑臉]

Tips

  • 細心的朋友會發(fā)現,html的meta設置屬性為referrer,而http請求頭里面卻是referer,原因是早期http標準制訂的那一波同仁,將referrer拼錯為referer[手動尷尬],后續(xù)版本為了兼容以前版本,不得已一錯再錯
  • 盜鏈可恥,如果非商用項目可以嘗試下本文提到的方案
  • 既然寫到這里,幫朋友打個廣告,廣告見上圖,需要者聯系:HAIYU-JIANG,坐標杭州融創(chuàng)·河濱之城
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 《老男孩Linux運維》筆記 隱藏Nginx軟件版本號 一般來說,軟件的漏洞都和版本有關。因此要盡量隱藏對訪問用戶...
    Zhang21閱讀 3,900評論 0 28
  • http://www.91ri.org/tag/fuzz-bug 通常情況下,有三種方法被廣泛用來防御CSRF攻擊...
    jdyzm閱讀 4,395評論 0 5
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發(fā)現,斷路器,智...
    卡卡羅2017閱讀 136,654評論 19 139
  • 一.盜鏈的定義: 某內容不在自己服務器上,而通過技術手段,繞過別人放廣告有利益的最終頁,直接在自己的有廣告有利益的...
    繁天涯閱讀 13,646評論 2 9
  • ngx_http_rewrite_module是Nginx服務器的重要模塊之一,它一方面實現了URL的重寫功能,另...
    吃瓜的東閱讀 1,269評論 0 1

友情鏈接更多精彩內容