一.盜鏈的定義:
某內容不在自己服務器上,而通過技術手段,繞過別人放廣告有利益的最終頁,直接在自己的有廣告有利益的頁面上向最終用戶提供此內容。 常常是一些名不見經傳的小網站來盜取一些有實力的大網站的地址(比如一些音樂、圖片、軟件的下載地址)然后放置在自己的網站中,通過這種方法盜取大網站的空間和流量。內容不在自己服務器上,而通過技術手段,繞過別人放廣告有利益的最終頁,直接在自己的有廣告有利益的頁面上向最終用戶提供此內容。 常常是一些名不見經傳的小網站來盜取一些有實力的大網站的地址(比如一些音樂、圖片、軟件的下載地址)然后放置在自己的網站中,通過這種方法盜取大網站的空間和流量。
二.某視防盜鏈:
1.Referer防盜鏈(央視網H5采用referer防盜鏈+token防盜鏈)
什么是referer?Referer是HTTP協議中request header的一部分,當瀏覽器向web服務器發送請求的時候,一般會帶上Referer,告訴服務器我是從哪個頁面鏈接過來的,服務器基此可以獲得一些信息用于處理。如果refer信息不是來自本站,就阻止訪問或者跳到其它鏈接。
我對某視網的H5進行了抓包,發現其采用了referer防盜鏈:
referer驗證過程抓包
不妨推測一下某視網referer防盜鏈的流程:
第一步:b_match進行referer驗證,成功訪問返回btime和bauth的信息,然后將btime和bauth通過b_mattching的進行referer驗證,通過繼續訪問,不通過返回error,。
我將b.matching的url復制到瀏覽器進行了驗證,即空referer的情況,charles截圖如下:
空referer的request截圖
請求返回結果如下圖:
由此可見,對referer的判斷可以起到防盜鏈的作用。但是,refer防盜鏈易于破解,大大降低了防盜鏈的作用。
第二步,b.matching通過驗證會返回一個tag,然后請求vdn,解析獲取視頻的原始url,然后把原始url作為參數進行new_url請求(參數還有btime,bauth以及referer):
請求返回新的url,response截圖·如下:
第三步,用新的url請求CDN
還有一種UA防盜鏈,也叫做客戶端白名單,依據就是User Agent字段,其原理和referer防盜鏈類似。UA 防盜鏈通常用在手機 APP 或者一些可自定義 User Agent 的應用。User agent和referer一樣,易于偽造。
2.Token防盜鏈(時間戳防盜鏈)
什么是token防盜鏈?Token防盜鏈通過對時間有關的字符串進行簽名,將時間,簽名信息通過一定的方式傳遞給CDN節點服務器作為判斷依據,CDN 節點則會根據 URL 的加密形式,取出對應的過期時間,和當前服務器時間進行比較,確認請求是否過期,過期的話,則直接拒絕;如果時間未過期,CDN 節點將根據約定的簽名算法和密文,計算后的值和 URL 中的原始加密串進行比較;通過之后,請求會被認為是合法的。不合法的請求可以采取禁止訪問或其他操作。
1)客戶端業務服務器生成驗證信息,驗證信息的生成由業務服務器負責,具體的加密過程需要確認如下事項:
a.確認過期時間的格式,默認采用UNIX時間戳格式
b.確認驗證信息中的密文,用戶計算驗證信息,需要和 CDN 平臺約定
c.確認驗證信息時加入的參數,默認為 URL 的路徑部分
d.根據上文的算法說明計算驗證信息,其中請求 URL 中的驗證參數為 _upt
2)CDN節點驗證過程
a.根據約定解析取出過期時間,和當前 CDN 節點服務器時間進行比較,確認請求是否過期
b.根據上文約定好的算法計算方式,計算出 MD5 加密串后,和 URL 中的加密串進行比較,驗證加密串是否一致
c.如果以上兩個步驟都驗證通過,請求才會被認為是合法的,這時 CDN 會請求資源響應給客戶端,否則會被認為是非法請求,直接響應 HTTP status code 403。