Cdn網(wǎng)絡(luò)防盜系統(tǒng)及防盜方法
【專利摘要】本發(fā)明公開了一種CDN網(wǎng)絡(luò)防盜系統(tǒng),包括:全局調(diào)度服務(wù)器,適于接收來自客戶端的第一請求,對該第一請求進行驗證,根據(jù)驗證通過的請求生成第二請求,并且將第二請求返回到客戶端;和邊緣節(jié)點服務(wù)器,適于接收來自客戶端的第二請求,并對該第二請求進行驗證,當?shù)诙埱篁炞C通過時,返回所述要獲取的數(shù)據(jù)給所述客戶端,否則向所述客戶端發(fā)送驗證失敗的信息。另外,本發(fā)明還提供一種CDN網(wǎng)絡(luò)防盜方法。利用本發(fā)明,解決了多客戶、防盜鏈策略經(jīng)常變化的直播流防盜鏈問題,降低了多客戶采取不同的防盜鏈策略和防盜鏈策略經(jīng)常變化時的系統(tǒng)實現(xiàn)復(fù)雜性和維護成本。
【專利說明】CDN網(wǎng)絡(luò)防盜系統(tǒng)及防盜方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及互聯(lián)網(wǎng)【技術(shù)領(lǐng)域】,尤其涉及⑶N網(wǎng)絡(luò)防盜系統(tǒng)及防盜方法。
【背景技術(shù)】
[0002]一般地,當用戶瀏覽頁面時,一個完整的頁面并不是一次全部傳送到客戶端。一個網(wǎng)站中如果沒有其頁面中所說的信息,例如圖片信息,那么它完全可以將這個圖片鏈接到別的網(wǎng)站。這樣沒有任何資源的網(wǎng)站利用了別的網(wǎng)站的資源來展示給瀏覽者,提高了自己的訪問量,而大部分瀏覽者又不會很容易地發(fā)現(xiàn),這樣顯然,對于那個被利用了資源的網(wǎng)站是不公平的。一些不良網(wǎng)站為了不增加成本而擴充自己站點內(nèi)容,經(jīng)常盜用其他網(wǎng)站的鏈接。一方面損害了原網(wǎng)站的合法利益,另一方面又加重了服務(wù)器的負擔。因此,相應(yīng)地產(chǎn)生了防盜鏈技術(shù)。
[0003]防盜鏈的實現(xiàn)原理是,在HTTP協(xié)議中,有一個表頭字段叫referer,采用URL的格式來表示從哪兒鏈接到當前的網(wǎng)頁或文件。換句話說,通過referer,網(wǎng)站可以檢測目標網(wǎng)頁訪問的來源網(wǎng)頁,如果是資源文件,則可以跟蹤到顯示它的網(wǎng)頁地址。有了 referer跟蹤來源,就可以通過技術(shù)手段來進行處理,一旦檢測到來源不是本站即進行阻止或者返回指定的頁面。
[0004]目前防盜鏈策略有多種,例如,基于時間的防盜鏈會攜帶失效時間戳變量,然后驗證失效時間戳是否在有效范圍內(nèi);基于IP的防盜鏈會先攜帶用戶IP地址,然后驗證訪問IP和攜帶的IP兩個參數(shù)是否一致。
[0005]播放源的數(shù)據(jù)在經(jīng)過對于⑶N網(wǎng)絡(luò)分發(fā)系統(tǒng),一般整個系統(tǒng)采用一種防盜鏈策略,多種防盜鏈策略不能并存,防盜鏈策略升級影響范圍較大,升級可能導(dǎo)致客戶災(zāi)難性后果。但是,CDN分發(fā)系統(tǒng)的防盜鏈不同于其他領(lǐng)域的防盜鏈,CDN分發(fā)系統(tǒng)的防盜鏈一般有一定的客戶量,每個客戶可能采取不同的防盜鏈策略,另外,客戶的防盜鏈策略還會經(jīng)常周期性變化。因此,目前的CDN分發(fā)系統(tǒng)的防盜鏈不能適應(yīng)多客戶、以及防盜鏈策略經(jīng)常改變的應(yīng)用場景。另外,當用戶有多個出口 IP時,攜帶的IP和驗證模塊獲取的IP地址可能不一致,會導(dǎo)致誤判。
【發(fā)明內(nèi)容】
[0006]鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的CDN網(wǎng)絡(luò)防盜系統(tǒng)及防盜方法。
[0007]依據(jù)本發(fā)明的一個方面,提供了一種⑶N網(wǎng)絡(luò)防盜系統(tǒng),包括全局調(diào)度服務(wù)器和多個邊緣節(jié)點服務(wù)器。其中,所述全局調(diào)度服務(wù)器,適于接收來自客戶端的第一請求,對該第一請求進行驗證,根據(jù)驗證通過的請求生成第二請求,并且將第二請求返回到客戶端,其中第一請求包括要獲取的數(shù)據(jù)信息,第二請求包括指定多個邊緣節(jié)點服務(wù)器之一的信息以及所述要獲取的數(shù)據(jù)信息。所述邊緣節(jié)點服務(wù)器,適于接收來自客戶端的第二請求,并對該第二請求進行驗證,當?shù)诙埱篁炞C通過時,返回所述要獲取的數(shù)據(jù)給所述客戶端,否則向所述客戶端發(fā)送驗證失敗的信息。
[0008]根據(jù)本發(fā)明上述的⑶N網(wǎng)絡(luò)防盜系統(tǒng),所述全局調(diào)度服務(wù)器包括第一網(wǎng)絡(luò)服務(wù)器和第一驗證模塊;其中,所述第一網(wǎng)絡(luò)服務(wù)器接收來自所述客戶端的第一請求并將其傳送給所述第一驗證模塊。所述第一驗證模塊對來自所述客戶端的第一請求進行驗證,生成第一驗證結(jié)果,并將所述第一驗證結(jié)果發(fā)送給所述第一網(wǎng)絡(luò)服務(wù)器;所述第一驗證結(jié)果包括驗證通過和驗證失敗。如果所述第一驗證結(jié)果是驗證通過,則所述第一網(wǎng)絡(luò)服務(wù)器生成第二請求,并將第二請求返回到所述客戶端;如果第一驗證結(jié)果是驗證失敗,則發(fā)送驗證失敗信息給所述第一網(wǎng)絡(luò)服務(wù)器,拒絕所述客戶端的請求。
[0009]根據(jù)本發(fā)明上述的⑶N網(wǎng)絡(luò)防盜系統(tǒng),所述邊緣節(jié)點服務(wù)器包括第二網(wǎng)絡(luò)服務(wù)器和第二驗證模塊。所述第二網(wǎng)絡(luò)服務(wù)器接收來自所述客戶端的第二請求,并將傳送給所述第二驗證模塊;所述第二驗證模塊解析所述第二請求,并對其進行驗證,生成第二驗證結(jié)果,將所述第二驗證結(jié)果發(fā)送給所述第二網(wǎng)絡(luò)服務(wù)器,所述第二驗證結(jié)果包括驗證通過和驗證失敗;當所述第二驗證結(jié)果是驗證通過時,所述第二網(wǎng)絡(luò)服務(wù)器將所述客戶端要獲取的數(shù)據(jù)發(fā)送給所述客戶端;當所述驗證結(jié)果是驗證失敗時,所述第二網(wǎng)絡(luò)服務(wù)器將驗證失敗信息發(fā)送給所述客戶端,拒絕所述客戶端的請求。
[0010]依據(jù)本發(fā)明的另一個方面,提供了一種⑶N網(wǎng)絡(luò)防盜方法,包括:接收客戶端發(fā)送的要獲取數(shù)據(jù)信息的第一請求,其中,第一請求包括要獲取的數(shù)據(jù)信息;對該第一請求進行驗證,生成第一驗證結(jié)果,其中第一驗證結(jié)果包括驗證通過和驗證失?。慌袛嗨龅谝或炞C結(jié)果是否是驗證通過,當?shù)谝或炞C結(jié)果為驗證失敗時,向客戶端發(fā)送請求失敗的信息;當?shù)谝或炞C結(jié)果為驗證通過時,生成第二請求,并將第二請求發(fā)送給所述客戶端;其中,第二請求包括指定多個邊緣節(jié)點服務(wù)器之一的信息以及所述要獲取的數(shù)據(jù)信息;所述邊緣節(jié)點服務(wù)器接收所述客戶端發(fā)送的第二請求;所述邊緣節(jié)點服務(wù)器對該第二請求進行驗證,生成第二驗證結(jié)果,其中第二驗證結(jié)果包括驗證通過和驗證失?。灰约芭袛嗨龅诙炞C結(jié)果是否是驗證通過,當?shù)诙炞C結(jié)果為驗證失敗時,向客戶端發(fā)送請求失敗的信息;當?shù)诙炞C結(jié)果為驗證通過時,將所述客戶端要獲取的數(shù)據(jù)信息發(fā)送給所述客戶端。
[0011]利用本發(fā)明,解決了多客戶、防盜鏈策略經(jīng)常變化的直播流防盜鏈問題,降低了多客戶采取不同的防盜鏈策略和防盜鏈策略經(jīng)常變化時的系統(tǒng)實現(xiàn)復(fù)雜性和維護成本。
[0012]上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的【具體實施方式】。
【專利附圖】
【附圖說明】
[0013]通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
[0014]圖1示出了根據(jù)本發(fā)明的一種實施方式的CDN網(wǎng)絡(luò)防盜系統(tǒng)的結(jié)構(gòu)示意圖;以及
[0015]圖2示出了根據(jù)本發(fā)明的一個實施方式的CDN網(wǎng)絡(luò)防盜方法的流程圖。
【具體實施方式】[0016]下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應(yīng)當理解,可以以各種形式實現(xiàn)本公開而不應(yīng)被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達給本領(lǐng)域的技術(shù)人員。
[0017]在當前的使用⑶N網(wǎng)絡(luò)分發(fā)數(shù)據(jù)的互聯(lián)網(wǎng)系統(tǒng)中,例如基于⑶N網(wǎng)絡(luò)將直播源的直播數(shù)據(jù)提供給向直播源請求直播數(shù)據(jù)的客戶端。在這些客戶端中,可能存在盜用直播數(shù)據(jù)的盜鏈情形。為此,在⑶N網(wǎng)絡(luò)中設(shè)置本發(fā)明的⑶N網(wǎng)絡(luò)防盜系統(tǒng)。
[0018]圖1示出了根據(jù)本發(fā)明的一種實施方式的CDN網(wǎng)絡(luò)防盜系統(tǒng)的結(jié)構(gòu)示意圖。如圖1所示,本發(fā)明的CDN網(wǎng)絡(luò)防盜系統(tǒng)120包括全局調(diào)度服務(wù)器1210和多個邊緣節(jié)點服務(wù)器1220。
[0019]全局調(diào)度服務(wù)器1210本身不提供服務(wù),主要用于調(diào)度各邊緣節(jié)點服務(wù)器1220。具體地,全局調(diào)度服務(wù)器1210接收來自客戶端110的第一請求,對該第一請求進行驗證,在驗證通過時生成第二請求,并且將第二請求返回到客戶端110。
[0020]其中第一請求是加過密的URL或者是有防盜鏈的URL。URL的加密通過與廠家協(xié)商確定,通常由廠家提供一個加密密鑰,來實現(xiàn)URL的加密。
[0021]第一請求包括要獲取的數(shù)據(jù)信息(例如要獲取的數(shù)據(jù)的網(wǎng)址)以及如下各項中的一項或者多項:
[0022]uuid:代表資源公開識別碼(或稱資源公開ID),是通用唯一識別碼(UniversallyUnique Identifier),其中包含了資源的一些信息,如內(nèi)部編號等,采用可逆加密處理,避免系統(tǒng)信息泄露;
[0023]sign:驗證串(即簽名串),是為了做防盜鏈驗證,避免第一請求地址被篡改;
[0024]timestamp:失效時間戳tm,用來檢查第一請求地址是否在有效時間之內(nèi);
[0025]a1:即app id(即客戶編號),也稱為客戶識別(ID)號,對應(yīng)一個客戶,例如一個公司或者組織,用于區(qū)分不同的客戶;
[0026]V:防盜鏈策略版本號。各版本有不同特性,可各自獨立使用,便于用戶平滑升級。
[0027]flag:是開關(guān)變量,可實現(xiàn)開關(guān)。例如:是否禁用防盜鏈,標識為d。需禁用防盜鏈時則為“d”,不禁用防盜鏈時則為空,滿足某些特定場合使用。
[0028]例如,第一請求可以為如下格式:
[0029]http://〈domain〉/ ? uuid = {uuid}
[0030]& sign = {sign}
[0031]×tamp = {timestamp}
[0032]&f lag = {flag}
[0033]&ai = {app id}
[0034]&v = {version}
[0035]第二請求包括指定多個邊緣節(jié)點服務(wù)器1220之一的信息以及所述要獲取的數(shù)據(jù)信息。所述指定多個邊緣節(jié)點服務(wù)器1220之一的信息包括客戶端的第一請求中的一些信息以及指向被指定的邊緣節(jié)點服務(wù)器1220的URL地址。例如,第二請求中的所述指定多個邊緣節(jié)點服務(wù)器之一的信息可以包括如下信息:
[0036]資源編號sid (source ID):其與資源公開ID (uuid)--對應(yīng),從所述資源公開ID解密后獲??;
[0037]失效時間戳tm ;timestamp,用來檢查第一請求地址是否在有效時間之內(nèi);以及
[0038]鏈接校驗參數(shù)k:是用來判斷第二請求地址是否被篡改,其根據(jù)資源編號Sid、失效時間戳tm和密鑰key (這里的key是和客戶約定的)進行不可逆哈希計算后得到的字符串,即,k = hash (<sid>+<timestamp>+<key>),例如K為通過上述計算后得到的32位字符串。
[0039]例如,第二請求可以為如下格式:
[0040]http://〈domain〉/ ? sid = {sid}&tm = {tm}&k = {k}
[0041]進一步地,全局調(diào)度服務(wù)器1210可以包括第一網(wǎng)絡(luò)服務(wù)器1211和第一驗證模塊1212。
[0042]其中,第一網(wǎng)絡(luò)服務(wù)器1211接收來自客戶端110的第一請求并將其傳送給第一驗證模塊1212。例如,客戶端110將包含要獲取的信息的請求URL發(fā)送給第一驗證模塊1212。
[0043]第一驗證模塊1212對來自客戶端110的第一請求進行驗證,生成第一驗證結(jié)果,并將所述第一驗證結(jié)果發(fā)送給第一網(wǎng)絡(luò)服務(wù)器1211。第一驗證結(jié)果包括驗證通過和驗證失敗。
[0044]第一驗證模塊1212在接收到來自客戶端110的第一請求后,首先,對該第一請求進行防盜鏈驗證。如果驗證未通過,則對第一請求的請求URL不進行處理,向第一網(wǎng)絡(luò)服務(wù)器1211發(fā)送驗證失敗的信息,第一網(wǎng)絡(luò)服務(wù)器1211向客戶端110發(fā)送“請求失敗”的信息,拒絕客戶端110的獲取數(shù)據(jù)的請求。如果驗證通過,則發(fā)送驗證成功的信息給第一網(wǎng)絡(luò)服務(wù)器1211,第一網(wǎng)絡(luò)服務(wù)器1211基于驗證通過的信息而生成第二請求,并將第二請求返回給客戶端HO。
[0045]第一驗證模塊1212引入了客戶ID和防盜鏈策略版本號參數(shù),通過客戶ID和防盜鏈策略版本號參數(shù)的組合,使得本發(fā)明可以適配不同客戶、不同的直播防盜鏈策略需求。
[0046]第一驗證模塊1212對客戶端110的第一請求進行的驗證可以包括如下邏輯驗證中的一個或多個:
[0047]I)獲取客戶端110第一請求中的HTTP請求頭中攜帶的Referer信息,通常,每個ai (即,客戶識別號,對應(yīng)一個客戶,例如一個公司或者組織)對應(yīng)一個referer列表。通過判斷Referer是否在許可范圍中來判斷所述第一請求中的請求URL是否為盜鏈。如果判斷Referer不在許可范圍內(nèi),則判斷該請求URL為盜鏈,向客戶端返回HTTP412,拒絕該客戶端的請求。
[0048]Referer是HTTP協(xié)議的請求頭的一部分,當客戶端瀏覽器向web服務(wù)器發(fā)送請求的時候,一般會帶上Referer,告訴服務(wù)器客戶端是從哪個頁面鏈接過來的,服務(wù)器由此可以獲得一些信息用于處理。比如,從我主頁上鏈接到一個朋友那里,他的服務(wù)器就能夠從Referer中統(tǒng)計出每天有多少用戶點擊我主頁上的鏈接訪問他的網(wǎng)站。
[0049]2)獲取客戶端110第一請求中的HTTP請求頭中攜帶的用戶代理User-agent信息,通過判斷用戶代理User-agent中是否包含特定字符來判斷所述第一請求中的請求URL是否為盜鏈。所述特定字符例如SOONER字符串。
[0050]這里,用戶代理User-Agent是Http協(xié)議中的一部分,屬于請求頭的組成部分,其是一種向訪問網(wǎng)站提供用戶所使用的瀏覽器類型、操作系統(tǒng)及版本、CPU類型、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等信息的標識。
[0051]3)將客戶端110的第一請求中攜帶的失效時間戳tm (timestamp)與當前時間進行比對,判斷客戶端的請求URL是否過期,失效時間戳tm為O則沒有過期,如果過期(即tm早于當前時間,不為零)則返回HTTP412,判定所述第一請求中的請求URL為盜鏈,拒絕該客戶端的請求。
[0052]4)根據(jù)所述客戶ID號(即ai或app id)和所述防盜鏈策略版本號參數(shù)V選取驗證密鑰對key (ai和V的組合與key有個對應(yīng)關(guān)系),根據(jù)所述驗證密鑰對key和所述客戶端的請求URL中的資源公開ID、失效時間戳、標記、客戶ID號、和版本號參數(shù)計算簽名串calsign, calsign的計算方法為:
[0053]〈calsign〉 = md5(<appid>+<key>+<timestamp>+<uuid>+<flag>+<version>+< 自定義的傳入?yún)?shù)〉
[0054]其中,自定義的傳入?yún)?shù)通過是在URL中增加的,這里只是從URL中將其取出。比較所述客戶端的請求URL中的簽名串sign與所述計算得到的簽名串calsign是否一致。如果一致,則驗證通過客戶端的請求;否則拒絕客戶端的請求,向客戶端返回HTTP412。
[0055]5)針對于不同的客戶端(用ai表示),設(shè)置相應(yīng)的禁用或許可規(guī)則,根據(jù)所設(shè)置的禁用或許可規(guī)則來判斷所述客戶端的IP是否在禁用或許可范圍內(nèi),從而達到限定IP的訪問請求的目的。
[0056]其中,通過參數(shù)〈flag〉設(shè)置開關(guān)處理邏輯disable,設(shè)置是否禁用防盜鏈。標識為d。如果禁用防盜鏈,則〈flag〉為“d”,如果不禁用防盜鏈,則〈flag〉為為空,這滿足某些特定場合使用。值得注意的是,當進行禁用防盜鏈判斷時,最好同時將失效時間戳tm (timestamp)設(shè)為0,否則可能會因為先行判斷失效時間戳tm失效(即過期)導(dǎo)致客戶端的請求被拒絕。
[0057]6)記錄相同請求URL的訪問次數(shù),如果相同請求URL訪問兩次以上,則判斷所述請求URL為盜鏈,則拒絕該客戶端的請求,向客戶端返回HTTP412,由此,可以達到限定用戶的目的。
[0058]第一驗證模塊1212對客戶端110的第一請求進行驗證時,可以選用上述邏輯驗證規(guī)則中的一個或多個,通常會選用第1)、3)、5)和6)條邏輯驗證規(guī)則。
[0059]以上只是示例性列出了第一驗證模塊1212對客戶端110的第一請求進行驗證的幾條邏輯驗證規(guī)則,本發(fā)明并不限于上述邏輯驗證規(guī)則,也可以包含更多的邏輯驗證規(guī)則。
[0060]如果第一驗證模塊1212的驗證結(jié)果為驗證通過,則將驗證通過的驗證結(jié)果發(fā)送給第一網(wǎng)絡(luò)服務(wù)器1211。第一網(wǎng)絡(luò)服務(wù)器1211基于驗證通過的信息,為所述客戶端分配一個邊緣節(jié)點服務(wù)器1220,并生成第二請求,將第二請求以HTTP302的方式返回給客戶端110。如前所述,第二請求中包含被分配的邊緣節(jié)點服務(wù)器1220的URL,以便客戶端能根據(jù)所述URL向該被分配的邊緣節(jié)點服務(wù)器1220發(fā)送請求。
[0061]邊緣節(jié)點服務(wù)器1220適于接收來自客戶端110的第二請求,并對該第二請求進行驗證,當?shù)诙埱篁炞C通過時,返回所述要獲取的數(shù)據(jù)給客戶端110,否則向客戶端110發(fā)送驗證失敗的信息。
[0062]具體地,邊緣節(jié)點服務(wù)器1220可以包括第二網(wǎng)絡(luò)服務(wù)器1221和第二驗證模塊1222。其中,第二網(wǎng)絡(luò)服務(wù)器1221接收來自客戶端110的第二請求,并將傳送給第二驗證模塊1222。第二驗證模塊1222解析所述第二請求,并對其進行驗證,生成第二驗證結(jié)果,將所述第二驗證結(jié)果發(fā)送給第二網(wǎng)絡(luò)服務(wù)器1221,所述第二驗證結(jié)果包括驗證通過和驗證失敗。
[0063]當所述第二驗證結(jié)果是驗證通過時,第二網(wǎng)絡(luò)服務(wù)器1221將所述客戶端110要獲取的數(shù)據(jù)發(fā)送給所述客戶端110。
[0064]當所述驗證結(jié)果是驗證失敗時,第二網(wǎng)絡(luò)服務(wù)器1221向所述客戶端110發(fā)送“請求失敗”的信息,拒絕客戶端110的請求。
[0065]其中,第二驗證模塊1222解析所述第二請求,通過如下的邏輯驗證以對請求URL進行防盜鏈驗證:
[0066]I)請求URL是否在有效期的驗證:
[0067]對于合法用戶來說,獲取的第二請求并不是可以永遠無限制的使用。第二請求中攜帶有失效時間戳tm。第二驗證模塊會比較失效時間戳tm與當前時間的大小,如果所述失效時間戳tm在當前時間之前,則該第二請求失效,否則有效;
[0068]2) URL唯一性驗證
[0069]用戶的第二請求中包括資源編號sid和精確到毫秒的失效時間戳tm。失效時間戳tm的產(chǎn)生和服務(wù)器的系統(tǒng)時間以及同一時間的請求數(shù)量有關(guān)。由于不同請求產(chǎn)生的相同鏈接的幾率非常小,所以可以認為第二請求是唯一的。通過判斷鏈接校驗參數(shù)k值是否變化,可以判斷第二請求是否被篡改。k值的計算方法如前面所述。
[0070]3)請求IP段驗證
[0071]獲取用戶發(fā)出第一請求時的IP地址,判斷該第一請求是否為首次請求,如果是首次請求,則記錄用戶的第一請求對應(yīng)的IP段;如果是非首次請求,則驗證和首次請求的IP段是否一致,不一致則認為所述用戶的第一請求是盜鏈請求。另外,記錄首次請求時和IP段對應(yīng)的數(shù)據(jù),在首次請求過期后自動消除。
[0072]通常,第二驗證模塊1222在對請求URL進行防盜鏈驗證時,進行上述三項邏輯驗證。
[0073]本發(fā)明還提供一種⑶N網(wǎng)絡(luò)防盜方法,如圖2所示,本發(fā)明的⑶N網(wǎng)絡(luò)防盜方法200起始于步驟S210,在步驟S210,接收客戶端發(fā)送的要獲取數(shù)據(jù)信息的第一請求。
[0074]這里,其中第一請求是加過密的URL或者是有防盜鏈的URL。URL的加密通過與廠家協(xié)商確定,通常由廠家提供一個加密密鑰,來實現(xiàn)URL的加密。
[0075]第一請求包括要獲取的數(shù)據(jù)信息(例如要獲取的數(shù)據(jù)的網(wǎng)址)以及如下各項中的一項或者多項:
[0076]uuid:資源公開 ID,是通用唯一識別碼(Universally Unique Identifier);
[0077]sign:驗證串(即簽名串);
[0078]timestamp:失效時間戮 tm ;
[0079]ai:app id(即客戶編號),也稱為客戶識別(ID)號;
[0080]V:防盜鏈策略版本號,各版本有不同特性,可各自獨立使用,便于用戶平滑升級。
[0081]flag:是開關(guān)變量,可實現(xiàn)開關(guān)。例如:是否禁用防盜鏈,標識為d。需禁用防盜鏈時則為“d”,不禁用防盜鏈時則為空,滿足某些特定場合使用。
[0082]例如,第一請求可以為如下格式:[0083]http://〈domain〉/ ? uuid = {uuid}
[0084]& sign = {sign}
[0085]×tamp = {timestamp}
[0086]&f lag = {flag}
[0087]&ai = {app id}
[0088]&v = {version}
[0089]接下來,執(zhí)行步驟S220,對所述第一請求進行驗證,生成第一驗證結(jié)果。第一驗證結(jié)果包括驗證通過和驗證失敗。
[0090]對所述第一請求進行驗證主要采用如下的一個或多個邏輯驗證:
[0091]I)獲取第一請求中的HTTP請求頭中攜帶的Referer信息。通過判斷Referer是否在許可范圍中來判斷所述第一請求中的請求URL是否為盜鏈。如果判斷Referer不在許可范圍內(nèi),則判斷該請求URL為盜鏈,向客戶端返回HTTP412,拒絕該客戶端的請求。
[0092]2)獲取客戶端110第一請求中的HTTP請求頭中攜帶的用戶代理User-agent信息,通過判斷用戶代理User-agent中是否包含特定字符來判斷所述第一請求中的請求URL是否為盜鏈。所述特定字符例如SOONER字符串。 [0093]3)將客戶端110的第一請求中攜帶的失效時間戳tm (timestamp)與當前時間進行比對,判斷客戶端的請求URL是否過期,失效時間戳tm為O則沒有過期,如果過期(即tm早于當前時間,不為零)則返回HTTP412,判定所述第一請求中的請求URL為盜鏈,拒絕該客戶端的請求。
[0094]4)根據(jù)所述客戶ID號(即ai或app id)和所述防盜鏈策略版本號參數(shù)V選取驗證密鑰對key (ai和V的組合與key有個對應(yīng)關(guān)系),根據(jù)所述驗證密鑰對key和所述客戶端的請求URL中的資源公開ID、失效時間戳、標記、客戶ID號、和版本號參數(shù)計算簽名串calsign, calsign的計算方法為:
[0095]〈calsign〉 = md5(<appid>+<key>+<timestamp>+<uuid>+<flag>+<version>+< 自定義的傳入?yún)?shù)〉。
[0096]其中,自定義的傳入?yún)?shù)通過是在URL中增加的,這里只是從URL中將其取出。比較所述客戶端的請求URL中的簽名串sign與所述計算得到的簽名串calsign是否一致。如果一致,則驗證通過客戶端的請求;否則拒絕客戶端的請求,向客戶端返回HTTP412。
[0097]5)針對于不同的客戶端(用ai表示),設(shè)置相應(yīng)的禁用或許可規(guī)則,根據(jù)所設(shè)置的禁用或許可規(guī)則來判斷所述客戶端的IP是否在禁用或許可范圍內(nèi),從而達到限定IP的訪問請求的目的。
[0098]其中,通過參數(shù)〈flag〉設(shè)置開關(guān)處理邏輯disable,設(shè)置是否禁用防盜鏈。標識為d。如果禁用防盜鏈,則〈flag〉為“d”,如果不禁用防盜鏈,則〈flag〉為為空,這滿足某些特定場合使用。值得注意的是,當進行禁用防盜鏈判斷時,最好同時將失效時間戳tm (timestamp)設(shè)為0,否則可能會因為先行判斷失效時間戳tm失效(即過期)導(dǎo)致客戶端的請求被拒絕。
[0099]6)記錄相同請求URL的訪問次數(shù),如果相同請求URL訪問兩次以上,則判斷所述請求URL為盜鏈,則拒絕該客戶端的請求,向客戶端返回HTTP412,由此,可以達到限定用戶的目的。[0100]以上只是示例性列出了第一驗證模塊1212對客戶端110的第一請求進行驗證的幾條邏輯驗證規(guī)則,本發(fā)明并不限于上述邏輯驗證規(guī)則,也可以包含更多的邏輯驗證規(guī)則。
[0101]接下來,執(zhí)行步驟S230,判斷第一驗證結(jié)果是否為驗證通過。當?shù)谝或炞C結(jié)果為驗證失敗時,則執(zhí)行步驟S240,向客戶端發(fā)送“請求失敗”的信息,例如,向客戶端返回HTTP412,拒絕客戶端的請求;
[0102]當?shù)谝或炞C結(jié)果為驗證通過時,則執(zhí)行步驟S250,生成第二請求;
[0103]第二請求包括指定多個邊緣節(jié)點服務(wù)器1220之一的信息以及所述要獲取的數(shù)據(jù)信息。所述指定多個邊緣節(jié)點服務(wù)器1220之一的信息包括客戶端的第一請求中的一些信息以及指向被指定的邊緣節(jié)點服務(wù)器1220的URL地址。例如,第二請求中的所述指定多個邊緣節(jié)點服務(wù)器之一的信息可以包括如下信息:
[0104]資源編號sid:其與資源公開ID(uuid) —一對應(yīng),從所述資源公開ID解密后獲??;
[0105]失效時間戳tm ;timestamp ;以及
[0106]鏈接校驗參數(shù)k:根據(jù)資源編號sid、失效時間戳tm和密鑰進行不可逆哈希計算后得到的字符串,即,k = hash(<sid>+<timestamp>+<key>),例如K為通過上述計算后得到的32位字符串。
[0107]例如,第二請求可以為如下格式:
[0108]http://〈domain〉/ ? sid = {sid}&tm = {tm}&k = {k}
[0109]接下來,執(zhí)行步驟S260,將第二請求發(fā)送給所述客戶端。
[0110]在步驟S260之后,執(zhí)行步驟S270,第二請求中被指定的邊緣節(jié)點服務(wù)器接收客戶端發(fā)送的第二請求。
[0111]接下來,在步驟S280,所述邊緣節(jié)點服務(wù)器對第二請求進行驗證,生成第二驗證結(jié)果。所述第二驗證結(jié)果包括驗證通過和驗證失敗。第二驗證模塊1222解析所述第二請求,通過逐個進行如下邏輯驗證以對請求URL進行防盜鏈驗證:
[0112]I)請求URL是否在有效期的驗證:
[0113]對于合法用戶來說,獲取的第二請求并不是可以永遠無限制的使用。第二請求中攜帶有失效時間戳tm。第二驗證模塊會比較失效時間戳tm與當前時間的大小,如果所述失效時間戳tm在當前時間之前,則該鏈接失效,否則有效;
[0114]2) URL唯一性驗證
[0115]用戶的第二請求中包括資源編號sid和精確到毫秒的失效時間戳tm。失效時間戳tm的產(chǎn)生和服務(wù)器的系統(tǒng)時間以及同一時間的請求數(shù)量有關(guān)。由于不同請求產(chǎn)生的相同鏈接的幾率非常小,所以可以認為第二請求是唯一的。通過判斷鏈接校驗參數(shù)k值是否變化,可以判斷第二請求是否被篡改。k值的計算方法如前面所述。
[0116]3)請求IP段驗證
[0117] 獲取用戶發(fā)出第一請求時的IP地址,判斷該第一請求是否為首次請求,如果是首次請求,則記錄用戶的第一請求對應(yīng)的IP段;如果是非首次請求,則驗證和首次請求的IP段是否一致,不一致則認為所述用戶的第一請求是盜鏈請求。另外,記錄首次請求時和IP段對應(yīng)的數(shù)據(jù),在首次請求所記錄的IP數(shù)據(jù)在過期后自動消除。有些情況下,用戶的出口IP有多個,所以用戶的出口 IP可能會變化,這時會出現(xiàn)誤判為盜鏈的情況。[0118]接下來,在步驟S290,判斷第二驗證結(jié)果是否為驗證通過。當?shù)诙炞C結(jié)果為驗證通過時,則執(zhí)行步驟S291,將客戶端所要獲取的數(shù)據(jù)發(fā)送給客戶端;當?shù)诙炞C結(jié)果為驗證失敗時,則執(zhí)行步驟S292,向客戶端發(fā)送“請求失敗”的信息。
[0119]本發(fā)明利用表示客戶ID號的參數(shù)ai和防盜鏈策略版本號的參數(shù)V,能夠區(qū)分每一個客戶以及其所使用的防盜鏈策略,由此解決了不同客戶采用不同的防盜鏈策略或者防盜鏈策略經(jīng)常變化的直播流防盜鏈問題,降低了多客戶采取不同的防盜鏈策略和防盜鏈策略經(jīng)常變化時的系統(tǒng)實現(xiàn)復(fù)雜性和維護成本。另外,本發(fā)明利用IP段的驗證邏輯,降低了防盜鏈誤判的幾率。
[0120]在此提供的算法和顯示不與任何特定計算機、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應(yīng)當明白,可以利用各種編程語言實現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實施方式。
[0121]在此處所提供的說明書中,說明了大量具體細節(jié)。然而,能夠理解,本發(fā)明的實施例可以在沒有這些具體細節(jié)的情況下實踐。在一些實例中,并未詳細示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。
[0122]類似地,應(yīng)當理解,為了精簡本公開并幫助理解各個發(fā)明方面中的一個或多個,在上面對本發(fā)明的示例性實施例的描述中,本發(fā)明的各個特征有時被一起分組到單個實施例、圖、或者對其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護的本發(fā)明要求比在每個權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個實施例的所有特征。因此,遵循【具體實施方式】的權(quán)利要求書由此明確地并入該【具體實施方式】,其中每個權(quán)利要求本身都作為本發(fā)明的單獨實施例。
[0123]本領(lǐng)域那些技術(shù)人員可以理解,可以對實施例中的設(shè)備中的模塊進行自適應(yīng)性地改變并且把它們設(shè)置在與該實施例不同的一個或多個設(shè)備中??梢园褜嵤├械哪K或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的的替代特征來代替。
[0124]此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實施例包括其它實施例中所包括的某些特征而不是其它特征,但是不同實施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實施例。例如,在下面的權(quán)利要求書中,所要求保護的實施例的任意之一都可以以任意的組合方式來使用。
[0125]本發(fā)明的各個部件實施例可以以硬件實現(xiàn),或者以在一個或者多個處理器上運行的軟件模塊實現(xiàn),或者以它們的組合實現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當理解,可以在實踐中使用微處理器或者數(shù)字信號處理器(DSP)來實現(xiàn)根據(jù)本發(fā)明實施例的瀏覽器客戶端中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計算機程序和計算機程序產(chǎn)品)。這樣的實現(xiàn)本發(fā)明的程序可以存儲在計算機可讀介質(zhì)上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
[0126]應(yīng)該注意的是上述實施例對本發(fā)明進行說明而不是對本發(fā)明進行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計出替換實施例。在權(quán)利要求中,不應(yīng)將位于括號之間的任何參考符號構(gòu)造成對權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當編程的計算機來實現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個可以是通過同一個硬件項來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。
【權(quán)利要求】
1.一種CDN網(wǎng)絡(luò)防盜系統(tǒng),包括全局調(diào)度服務(wù)器和多個邊緣節(jié)點服務(wù)器,其中, 所述全局調(diào)度服務(wù)器,適于接收來自客戶端的第一請求,對該第一請求進行驗證,根據(jù)驗證通過的請求生成第二請求,并且將第二請求返回到客戶端,其中第一請求包括要獲取的數(shù)據(jù)信息,第二請求包括指定多個邊緣節(jié)點服務(wù)器之一的信息以及所述要獲取的數(shù)據(jù)信息; 所述邊緣節(jié)點服務(wù)器,適于接收來自客戶端的第二請求,并對該第二請求進行驗證,當?shù)诙埱篁炞C通過時,返回所述要獲取的數(shù)據(jù)給所述客戶端,否則向所述客戶端發(fā)送驗證失敗的息。
2.根據(jù)權(quán)利要求1所述的系統(tǒng),其中, 所述全局調(diào)度服務(wù)器包括第一網(wǎng)絡(luò)服務(wù)器和第一驗證模塊;其中, 所述第一網(wǎng)絡(luò)服務(wù)器接收來自所述客戶端的第一請求并將其傳送給所述第一驗證模塊, 所述第一驗證模塊對來自所述客戶端的第一請求進行驗證,生成第一驗證結(jié)果,并將所述第一驗證結(jié)果發(fā)送給 所述第一網(wǎng)絡(luò)服務(wù)器;所述第一驗證結(jié)果包括驗證通過和驗證失敗; 如果所述第一驗證結(jié)果是驗證通過,則所述第一網(wǎng)絡(luò)服務(wù)器生成第二請求,并將第二請求返回到所述客戶端;如果第一驗證結(jié)果是驗證失敗,則發(fā)送驗證失敗信息給所述第一網(wǎng)絡(luò)服務(wù)器,拒絕所述客戶端的請求。
3.根據(jù)權(quán)利要求1或2所述的系統(tǒng),其中, 所述邊緣節(jié)點服務(wù)器包括第二網(wǎng)絡(luò)服務(wù)器和第二驗證模塊, 所述第二網(wǎng)絡(luò)服務(wù)器接收來自所述客戶端的第二請求,并將傳送給所述第二驗證模塊; 所述第二驗證模塊解析所述第二請求,并對其進行驗證,生成第二驗證結(jié)果,將所述第二驗證結(jié)果發(fā)送給所述第二網(wǎng)絡(luò)服務(wù)器,所述第二驗證結(jié)果包括驗證通過和驗證失敗;當所述第二驗證結(jié)果是驗證通過時,所述第二網(wǎng)絡(luò)服務(wù)器將所述客戶端要獲取的數(shù)據(jù)發(fā)送給所述客戶端; 當所述驗證結(jié)果是驗證失敗時,所述第二網(wǎng)絡(luò)服務(wù)器將驗證失敗信息發(fā)送給所述客戶端,拒絕所述客戶端的請求。
4.根據(jù)權(quán)利要求1一 3中任何一項所述的系統(tǒng),其中, 所述第一請求包括資源公開識別碼、簽名串、失效時間戳、標記、客戶識別號、和防盜鏈策略版本號參數(shù)。
5.根據(jù)權(quán)利要求4所述的系統(tǒng),其中, 所述第一驗證模塊對所述客戶端的第一請求進行的驗證包括如下邏輯驗證中的一個或多個: 獲取所述客戶端請求URL中HTTP請求頭中攜帶的Referer信息,通過判斷Referer是否在許可范圍中來判斷所述請求URL是否為盜鏈; 獲取所述客戶端請求URL中HTTP請求頭中攜帶的用戶代理User-agent信息,通過判斷用戶代理User-agent中是否包含特定字符來判斷所述請求URL是否為盜鏈; 將所述客戶端的請求URL中攜帶的失效時間戳與當前時間進行比對,判斷所述請求URL是否過期; 根據(jù)所述客戶識別號和所述防盜鏈策略版本號參數(shù)選取驗證密鑰對,根據(jù)所述驗證密鑰對和所述客戶端的請求URL中的通用唯一識別碼、失效時間戳、標記、客戶識別號、和版本號參數(shù)計算簽名串,比較所述客戶端的請求URL中的簽名串與所述計算得到的簽名串是否一致; 根據(jù)預(yù)先確定的對于不同的客戶端設(shè)置的禁用或許可規(guī)則,判斷所述客戶端請求URL中的IP是否在禁用或許可范圍內(nèi);以及 記錄相同URL的訪問次數(shù),如果相同URL訪問兩次以上,則判斷所述請求URL為盜鏈。
6.根據(jù)權(quán)利要求1一 5中任何一項所述的系統(tǒng),其中, 所述第二請求中的所述指定多個邊緣節(jié)點服務(wù)器之一的信息包括: 資源編號sid,其與通用唯一識別碼一一對應(yīng),從所述通用唯一識別碼解密后獲??; 失效時間戳tm ;以及 鏈接校驗參數(shù)k,其根據(jù)資源編號sid、失效時間戳tm和密鑰進行不可逆哈希計算后得到的字符串。
7.根據(jù)權(quán)利要求6所述的系統(tǒng),其中, 所述第二驗證模塊所進行的驗證包括如下邏輯驗證中的一個或者多個: 比較所述客戶端的第一請求中包含的URL中攜帶的失效時間戳與當前時間的大小,如果所述失效時間戳在當前時間之前,則所述客戶端的請求URL失效,否則有效; 通過判斷鏈接校驗參數(shù)k值是否變化來判斷所述客戶端的第一請求中包含的URL是否被桌改; 獲取所述發(fā)出第一請求的客戶端的IP地址,判斷該第一請求是否為首次請求,如果是首次請求,則記錄所述客戶端的對應(yīng)的IP段;如果是非首次請求,驗證和首次請求的IP段是否一致,不一致則認為所述客戶端的請求是盜鏈請求。
8.一種⑶N網(wǎng)絡(luò)防盜方法,包括: 接收客戶端發(fā)送的要獲取數(shù)據(jù)信息的第一請求,其中,第一請求包括要獲取的數(shù)據(jù)信息; 對該第一請求進行驗證,生成第一驗證結(jié)果,其中第一驗證結(jié)果包括驗證通過和驗證失敗; 判斷所述第一驗證結(jié)果是否是驗證通過,當?shù)谝或炞C結(jié)果為驗證失敗時,向客戶端發(fā)送請求失敗的信息;當?shù)谝或炞C結(jié)果為驗證通過時,生成第二請求,并將第二請求發(fā)送給所述客戶端;其中,第二請求包括指定多個邊緣節(jié)點服務(wù)器之一的信息以及所述要獲取的數(shù)據(jù)信息; 所述邊緣節(jié)點服務(wù)器接收所述客戶端發(fā)送的第二請求; 所述邊緣節(jié)點服務(wù)器對該第二請求進行驗證,生成第二驗證結(jié)果,其中第二驗證結(jié)果包括驗證通過和驗證失??;以及 判斷所述第二驗證結(jié)果是否是驗證通過,當?shù)诙炞C結(jié)果為驗證失敗時,向客戶端發(fā)送請求失敗的信息;當?shù)诙炞C結(jié)果為驗證通過時,將所述客戶端要獲取的數(shù)據(jù)信息發(fā)送給所述客戶端。
9.根據(jù)權(quán)利要求8所述的方法,其中,所述第一請求包括通用唯一識別碼、簽名串、失效時間戳、標記、客戶識別號、和防盜鏈策略版本號參數(shù)。
10.根據(jù)權(quán)利要求9所述的方法,其中, 所述對第一請求進行的驗證包括如下邏輯驗證中的一個或多個: 獲取所述客戶端請求URL中HTTP請求頭中攜帶的REFERER信息,通過判斷REFERER是否在許可范圍中來判斷所述請求URL是否為盜鏈; 獲取所述客戶端請求URL中HTTP請求頭中攜帶的用戶代理user-agent信息,通過判斷用戶代理user-agent中是否包含特定字符來判斷所述請求URL是否為盜鏈; 將所述客戶端的請求URL中攜帶的失效時間戳與當前時間進行比對,判斷所述請求URL是否過期; 根據(jù)所述客戶識別號和所述防盜鏈策略版本號參數(shù)選取驗證密鑰對,根據(jù)所述驗證密鑰對和所述客戶端的請求URL中的通用唯一識別碼、失效時間戳、標記、客戶識別號、和版本號參數(shù)計算簽名串,比較所述客戶端的請求URL中的簽名串與所述計算得到的簽名串是否一致; 根據(jù)預(yù)先確定的 對于不同的客戶端設(shè)置的禁用或許可規(guī)則,判斷所述客戶端請求URL中的IP是否在禁用或許可范圍內(nèi);以及 記錄相同URL的訪問次數(shù),如果相同URL訪問兩次以上,則判斷所述請求URL為盜鏈。
【文檔編號】H04L29/06GK103986735SQ201410247885
【公開日】2014年8月13日 申請日期:2014年6月5日 優(yōu)先權(quán)日:2014年6月5日
【發(fā)明者】王斌忠, 支小牧, 肖毅, 岳彩立 申請人:北京賽維安訊科技發(fā)展有限公司