本發(fā)明涉及通信技術領域,尤其涉及一種基于HTTP靜態(tài)壓縮數據流的有害代碼檢測方法和裝置。
背景技術:
目前,為了提高網絡傳輸的安全性,針對互聯(lián)網服務器發(fā)送的基于超文本傳輸協(xié)議(Hyper Text Transfer Protocol,HTTP)的gzip壓縮數據流(由數據流分別經過LZ77壓縮和霍夫曼編碼得到),位于互聯(lián)網服務器與客戶端之間的防火墻和網關服務器需要對壓縮數據流的各個TCP壓縮分片進行入侵檢測和有害代碼的檢測,檢測通過后才將壓縮數據流的各個TCP壓縮分片發(fā)送至客戶端。
現(xiàn)有技術中,防火墻和網關服務器對壓縮數據流進行檢測時,首先需要對壓縮數據流依次進行霍夫曼解碼和LZ77解壓,然后對解壓后的數據流進行入侵或有害代碼的檢測。然而,對壓縮數據流進行的霍夫曼解碼和LZ77解壓,消耗了大量的時間和存儲資源,延長了壓縮數據流的傳輸時間,影響客戶端用戶上網體驗的速度。
技術實現(xiàn)要素:
本發(fā)明提供一種基于HTTP靜態(tài)壓縮數據流的有害代碼檢測方法和裝置,用于解決現(xiàn)有的檢測過程中,消耗大量的時間和存儲資源的問題。
本發(fā)明的第一個方面是提供一種基于HTTP靜態(tài)壓縮數據流的有害代碼檢測方法,包括:
獲取互聯(lián)網服務器發(fā)送客戶端待接受的gzip壓縮數據流,所述gzip壓縮數據流為所述互聯(lián)網服務器將原始明文數據經過LZ77壓縮和霍夫曼編碼后得到的壓縮數據流;
查詢預設的霍夫曼樹,獲取有害模式串中各字符對應的二進制霍夫曼編 碼,生成有害模式串對應的目標二進制串;
根據所述目標二進制串查詢所述gzip壓縮數據流,獲取所述gzip壓縮數據流中所述目標二進制串第一次的出現(xiàn)位置;
對所述gzip壓縮數據流中所述出現(xiàn)位置之后的壓縮數據流進行霍夫曼解碼,得到經過LZ77壓縮的第一壓縮數據流,所述第一壓縮數據流中包括至少一個TCP壓縮分片;
觸發(fā)多模式匹配窗口滑動,以推動LZ77解壓滑動窗口在所述第一壓縮數據流上的滑動,以實現(xiàn)采用所述LZ77解壓滑動窗口對所述第一壓縮數據流進行LZ77解壓的同時,采用所述多模式匹配窗口對解壓后得到的原始明文數據進行有害模式串的匹配;其中,采用所述LZ77解壓滑動窗口對所述第一壓縮數據流進行LZ77解壓的過程中,根據第一壓縮數據流中的指針查詢預設的臨時棧,判斷所述臨時棧中是否存有位于所述指針所指向的參考字符串中的第一索引位置,若存有,根據所述指針所指向的參考字符串中的第一索引位置,確定所述指針所在的目標位置上替換得到的參考字符串中的第二索引位置,將所述第二索引位置存儲至所述臨時棧中;并判斷所述指針所指向的參考字符串的長度length是否大于2(Lmin-1),在所述指針所指向的參考字符串的長度length大于2(Lmin-1)時,在所述指針所在的目標位置上的參考字符串中的第Lmin-1個字符處設置跳躍距離參數Length-2(Lmin-1)+1,以便在采用多模式匹配窗口對解壓后得到的原始明文數據進行有害模式串的匹配時,在所述參考字符串中的第Lmin-1個字符處跳躍Length-2(Lmin-1)+1個字符至第Length-(Lmin-1)+1個字符處進行模式串匹配;所述LZ77解壓滑動窗口的右邊界和多模式匹配窗口的右邊界之間的距離小于Lmin-1;Lmin表示所述有害模式串的最小長度,且為正整數;Length為LZ77解壓過程中指針所指向的參考字符串的長度;所述指針中包括所述指針所在的目標位置至所述指針指向的參考字符串的位置之間的第一距離,以及所述參考字符串的長度;
若在對所述至少一個TCP壓縮分片全部解壓后,其所對應的原始明文數據中不含有與有害模式串匹配的字符串,則將所述TCP壓縮分片對應的gzip壓縮數據流發(fā)送至所述客戶端。
進一步地,所述采用所述多模式匹配窗口對解壓后得到的原始明文數據 進行有害模式串的匹配,包括:
獲取所述原始明文數據中第i字節(jié)至第i+N-1字節(jié)組成的第一待匹配的字符塊;
判斷所述第一待匹配的字符塊中各字符上是否設置有跳躍距離參數;
若所述第一待匹配的字符塊中各字符上均未設置有跳躍距離參數,則判斷所述第一待匹配的字符塊在預設的SHIFT表中是否存在對應的步長值,若所述第一待匹配的字符塊在所述預設的SHIFT表中不存在對應的步長值,將i加Lmin-1,重復上述步驟,直至判斷完成;
其中,i為正整數,且初始時i等于1;N表示所述待匹配的字符塊的字節(jié)長度,且為正整數。
進一步地,所述的方法還包括:
若所述第一待匹配的字符塊在所述預設的SHIFT表中存在對應的步長值,則判斷所述待匹配的字符塊在所述預設的SHIFT表中存在對應的步長值是否為預設步長值;
若所述待匹配的字符塊在所述預設的SHIFT表中存在對應的步長值是為所述預設步長值,則獲取所述第i字節(jié)的前面Lmin-N個字節(jié);
將所述Lmin-N個字節(jié)添加至所述第一待匹配的字符塊前,以形成第二待匹配的字符塊;
根據所述第一待匹配的字符塊查詢預設的哈希表,獲取包括所述第一待匹配的字符塊的第一有害模式串;
判斷所述第二待匹配的字符塊與所述第一有害模式串是否匹配;
將i加1,重復上述步驟,直至判斷完成;
其中,N表示所述待匹配的字符塊的字節(jié)長度,且為正整數;Lmin表示所述有害模式串的最小長度,且為正整數。
進一步地,所述的方法還包括:
若所述第一待匹配的字符塊中的字符上設置有跳躍距離參數,則將i加Length-2(Lmin-1)+1;并重新獲取第一待匹配的字符塊進行匹配。
進一步地,所述的方法還包括:
若所述第二待匹配的字符塊與所述第一有害模式串匹配,則將所述第二待匹配的字符塊的索引位置存儲至所述臨時棧中。
進一步地,所述判斷所述臨時棧中是否存有位于所述指針所指向的參考字符串中的第一索引位置,包括:
獲取所述臨時棧中存儲的與有害模式串匹配的字符串的索引位置,所述索引位置包括:所述字符串的索引地址以及所述字符串的長度;
判斷所述字符串的索引位置與所述指針是否滿足以下公式:
指針所在的目標位置-所述指針中的第一距離<=字符串的索引位置<=指針所在的目標位置-所述指針中的第一距離+所述指針中的所述參考字符串的長度;
若所述字符串的索引位置與所述指針滿足上述公式,則確定所述臨時棧中存有位于所述指針所指向的參考字符串中的第一索引位置。
本發(fā)明中,通過獲取經過LZ77壓縮和霍夫曼編碼的gzip壓縮數據流,查詢預設的霍夫曼樹,獲取有害模式串對應的目標二進制串,根據目標二進制串查詢gzip壓縮數據流,獲取gzip壓縮數據流中目標二進制串第一次的出現(xiàn)位置,對gzip壓縮數據流中出現(xiàn)位置之后的壓縮數據流進行霍夫曼解碼,得到經過LZ77壓縮的第一壓縮數據流;觸發(fā)多模式匹配窗口滑動,以推動LZ77解壓滑動窗口在第一壓縮數據流上的滑動,以實現(xiàn)采用LZ77解壓滑動窗口對第一壓縮數據流進行LZ77解壓的同時,采用多模式匹配窗口對解壓后得到的原始明文數據進行有害模式串的匹配;其中,針對第一壓縮數據流中的長指針,只做邊界匹配,并判斷臨時棧是否存有位于指針所指向的參考字符串中的索引位置,若有,確定指針所在的目標位置中的索引位置并存儲至臨時棧中,且LZ77解壓滑動窗口和多模式匹配窗口之間的距離小于預設距離閾值,從而實現(xiàn)邊進行LZ77解壓,邊進行跳躍性的多模匹配檢測,縮短了壓縮數據流的入侵或有害代碼檢測時間,提高了客戶端用戶上網體驗的速度。
本發(fā)明的另一個方面提供一種基于HTTP靜態(tài)壓縮數據流的有害代碼檢測裝置,包括:
獲取模塊,用于獲取互聯(lián)網服務器發(fā)送客戶端待接受的gzip壓縮數據流,所述gzip壓縮數據流為所述互聯(lián)網服務器將原始明文數據經過LZ77壓縮和霍夫曼編碼后得到的壓縮數據流;
查詢模塊,用于查詢預設的霍夫曼樹,獲取有害模式串中各字符對應的二進制霍夫曼編碼,生成有害模式串對應的目標二進制串;
所述查詢模塊,還用于根據所述目標二進制串查詢所述gzip壓縮數據流,獲取所述gzip壓縮數據流中所述目標二進制串第一次的出現(xiàn)位置;
解壓模塊,用于對所述gzip壓縮數據流中所述出現(xiàn)位置之后的壓縮數據流進行霍夫曼解碼,得到經過LZ77壓縮的第一壓縮數據流,所述第一壓縮數據流中包括至少一個TCP壓縮分片;
觸發(fā)模塊,用于觸發(fā)多模式匹配窗口滑動,以推動LZ77解壓滑動窗口在所述第一壓縮數據流上的滑動;
匹配模塊,用于在采用所述LZ77解壓滑動窗口對所述第一壓縮數據流進行LZ77解壓的同時,采用所述多模式匹配窗口對解壓后得到的原始明文數據進行有害模式串的匹配;其中,采用所述LZ77解壓滑動窗口對所述第一壓縮數據流進行LZ77解壓的過程中,根據第一壓縮數據流中的指針查詢預設的臨時棧,判斷所述臨時棧中是否存有位于所述指針所指向的參考字符串中的第一索引位置,若存有,根據所述指針所指向的參考字符串中的第一索引位置,確定所述指針所在的目標位置上替換得到的參考字符串中的第二索引位置,將所述第二索引位置存儲至所述臨時棧中;并判斷所述指針所指向的參考字符串的長度length是否大于2(Lmin-1),在所述指針所指向的參考字符串的長度length大于2(Lmin-1)時,在所述指針所在的目標位置上的參考字符串中的第Lmin-1個字符處設置跳躍距離參數Length-2(Lmin-1)+1,以便在采用多模式匹配窗口對解壓后得到的原始明文數據進行有害模式串的匹配時,在所述參考字符串中的第Lmin-1個字符處跳躍Length-2(Lmin-1)+1個字符至第Length-(Lmin-1)+1個字符處進行模式串匹配;所述LZ77解壓滑動窗口的右邊界和多模式匹配窗口的右邊界之間的距離小于Lmin-1;Lmin表示所述有害模式串的最小長度,且為正整數;Length為LZ77解壓過程中指針所指向的參考字符串的長度;所述臨時棧中保存有所述至少一個TCP壓縮分片中與有害模式串匹配的模式串的索引位置;所述指針中包括所述指針所在的目標位置至所述指針指向的參考字符串的位置之間的第一距離,以及所述參考字符串的長度;
發(fā)送模塊,用于在對所述至少一個TCP壓縮分片全部解壓后,其所對應 的原始明文數據中不含有與有害模式串匹配的字符串時,將所述TCP壓縮分片對應的gzip壓縮數據流發(fā)送至所述客戶端。
進一步地,所述匹配模塊包括:獲取子模塊和判斷子模塊;
所述匹配模塊采用所述多模式匹配窗口對解壓后得到的原始明文數據進行有害模式串的匹配中,所述獲取子模塊,用于獲取所述原始明文數據中第i字節(jié)至第i+N-1字節(jié)組成的第一待匹配的字符塊;
所述判斷子模塊,用于判斷所述第一待匹配的字符塊中各字符上是否設置有跳躍距離參數;
所述判斷子模塊,還用于在所述第一待匹配的字符塊中各字符上均未設置有跳躍距離參數時,判斷所述第一待匹配的字符塊在預設的SHIFT表中是否存在對應的步長值,若所述第一待匹配的字符塊在所述預設的SHIFT表中不存在對應的步長值,將i加Lmin-1,重復上述步驟,直至判斷完成;
其中,i為正整數,且初始時i等于1;N表示所述待匹配的字符塊的字節(jié)長度,且為正整數。
進一步地,所述匹配模塊還包括:添加子模塊;
所述判斷子模塊,還用于在所述第一待匹配的字符塊在所述預設的SHIFT表中存在對應的步長值時,判斷所述待匹配的字符塊在所述預設的SHIFT表中存在對應的步長值是否為預設步長值;
所述獲取子模塊,還用于所述待匹配的字符塊在所述預設的SHIFT表中存在對應的步長值是為所述預設步長值時,獲取所述第i字節(jié)的前面Lmin-N個字節(jié);
所述添加子模塊,用于將所述Lmin-N個字節(jié)添加至所述第一待匹配的字符塊前,以形成第二待匹配的字符塊;
所述獲取子模塊,還用于根據所述第一待匹配的字符塊查詢預設的哈希表,獲取包括所述第一待匹配的字符塊的第一有害模式串;
所述判斷子模塊,還用于判斷所述第二待匹配的字符塊與所述第一有害模式串是否匹配;
將i加1,重復上述步驟,直至判斷完成;
其中,N表示所述待匹配的字符塊的字節(jié)長度,且為正整數;Lmin表示所述有害模式串的最小長度,且為正整數。
進一步地,所述獲取子模塊,還用于在所述第一待匹配的字符塊中的字符上設置有跳躍距離參數時,將i加Length-2(Lmin-1)+1;并重新獲取第一待匹配的字符塊進行匹配。
本發(fā)明中,通過獲取經過LZ77壓縮和霍夫曼編碼的gzip壓縮數據流,查詢預設的霍夫曼樹,獲取有害模式串對應的目標二進制串,根據目標二進制串查詢gzip壓縮數據流,獲取gzip壓縮數據流中目標二進制串第一次的出現(xiàn)位置,對gzip壓縮數據流中出現(xiàn)位置之后的壓縮數據流進行霍夫曼解碼,得到經過LZ77壓縮的第一壓縮數據流;觸發(fā)多模式匹配窗口滑動,以推動LZ77解壓滑動窗口在第一壓縮數據流上的滑動,以實現(xiàn)采用LZ77解壓滑動窗口對第一壓縮數據流進行LZ77解壓的同時,采用多模式匹配窗口對解壓后得到的原始明文數據進行有害模式串的匹配;其中,針對第一壓縮數據流中的長指針,只做邊界匹配,并判斷臨時棧是否存有位于指針所指向的參考字符串中的索引位置,若有,確定指針所在的目標位置中的索引位置并存儲至臨時棧中,且LZ77解壓滑動窗口和多模式匹配窗口之間的距離小于預設距離閾值,從而實現(xiàn)邊進行LZ77解壓,邊進行跳躍性的多模匹配檢測,縮短了壓縮數據流的入侵或有害代碼檢測時間,提高了客戶端用戶上網體驗的速度。
附圖說明
圖1為本發(fā)明提供的基于HTTP靜態(tài)壓縮數據流的有害代碼檢測方法一個實施例的流程圖;
圖2為根據第一壓縮數據流中的指針查詢預設的臨時棧獲取第一索引位置以及存儲第二索引位置的示意圖;
圖3為本發(fā)明提供的基于HTTP靜態(tài)壓縮數據流的有害代碼檢測方法又一個實施例的流程圖;
圖4為本發(fā)明提供的基于HTTP靜態(tài)壓縮數據流的有害代碼檢測裝置一個實施例的結構示意圖;
圖5為本發(fā)明提供的基于HTTP靜態(tài)壓縮數據流的有害代碼檢測裝置又一個實施例的結構示意圖。
具體實施方式
為使本發(fā)明實施例的目的、技術方案和優(yōu)點更加清楚,下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
圖1為本發(fā)明提供的基于HTTP靜態(tài)壓縮數據流的有害代碼檢測方法一個實施例的流程圖,如圖1所示,具體包括以下步驟:
101、獲取互聯(lián)網服務器發(fā)送客戶端待接受的gzip壓縮數據流,gzip壓縮數據流為互聯(lián)網服務器將原始明文數據經過LZ77壓縮和霍夫曼編碼后得到的壓縮數據流。
本發(fā)明提供的基于HTTP靜態(tài)壓縮數據流的有害代碼檢測方法的執(zhí)行主體為基于HTTP靜態(tài)壓縮數據流的有害代碼檢測裝置,基于HTTP靜態(tài)壓縮數據流的有害代碼檢測裝置具體可以為位于互聯(lián)網服務器與客戶端之間的防火墻或者網關服務器。
其中,LZ77是一種自適應的指針回溯壓縮算法,核心是在LZ77壓縮滑動窗口中的歷史字符中搜索重復的字節(jié),當有重復的字節(jié)時,重復的字節(jié)將被一組短小的指針(distance,length)替換,指針里面distance是指與重復字節(jié)之間的距離,從1到32KB之間。length是3到258之間的一個數,代表重復字節(jié)的長度。例如,字符“applefapplt”,可以被壓縮為“applef(6,4)t”。LZ77壓縮處理的對象具體可以為原始明文數據中的HTML語言、Javascript語言和CSS文件等。
互聯(lián)網服務器對原始明文數據進行LZ77壓縮后,采用霍夫曼編碼對LZ77壓縮后的數據流的壓縮過程包括:采用霍夫曼編碼對LZ77壓縮過程中生成的指針以及字符進行再次壓縮,得到兩棵霍夫曼樹信息和兩類霍夫曼編碼的bit流;最后采用游程編碼和霍夫曼編碼壓縮技術壓縮兩棵霍夫曼樹的數據序列信息。
互聯(lián)網服務器對原始明文數據壓縮完成得到gzip壓縮數據流后,可以將gzip壓縮數據流拆分成多個連續(xù)的gzip壓縮數據包,為每個gzip壓縮數據包分配HTTP文件頭,并進行發(fā)送。
102、查詢預設的霍夫曼樹,獲取有害模式串中各字符對應的二進制霍夫曼編碼,生成有害模式串對應的目標二進制串。
其中,在霍夫曼樹中,每個字符可以對應一個霍夫曼編碼值,例如,字符“a”對應的霍夫曼編碼值可以是0100;字符“r”對應的霍夫曼編碼值可以是10111;字符“e”對應的霍夫曼編碼值可以是001;字符“o”對應的霍夫曼編碼值可以是10110;字符“t”對應的霍夫曼編碼值可以是1000;字符“h”對應的霍夫曼編碼值可以是10011。若某個有害模式串為“there”,則該有害模式串對應的目標二進制串為“10001001100110111001”。
103、根據目標二進制串查詢gzip壓縮數據流,獲取gzip壓縮數據流中目標二進制串第一次的出現(xiàn)位置。
104、對gzip壓縮數據流中出現(xiàn)位置之后的壓縮數據流進行霍夫曼解碼,得到經過LZ77壓縮的第一壓縮數據流,第一壓縮數據流中包括至少一個TCP壓縮分片。
防火墻或網關服務器獲取到的gzip壓縮數據流具體可以為多個連續(xù)的攜帶有HTTP文件頭的gzip壓縮數據包,每個gzip壓縮數據包中包括一個TCP壓縮分片。防火墻或網關服務器獲取到gzip壓縮數據流之后,可以移出每個壓縮數據包的HTTP文件頭,將壓縮數據包按照序號組成壓縮數據流。壓縮數據包的大小一般從64字節(jié)到1518字節(jié)。其中,霍夫曼樹信息被存儲在第一個gzip壓縮數據包中。一般而言,不同的gzip壓縮數據流有不同的霍夫曼樹信息。
105、觸發(fā)多模式匹配窗口滑動,以推動LZ77解壓滑動窗口在第一壓縮數據流上的滑動,以實現(xiàn)采用LZ77解壓滑動窗口對第一壓縮數據流進行LZ77解壓的同時,采用多模式匹配窗口對解壓后得到的原始明文數據進行有害模式串的匹配;其中,采用LZ77解壓滑動窗口對第一壓縮數據流進行LZ77解壓的過程中,根據第一壓縮數據流中的指針查詢預設的臨時棧,判斷臨時棧中是否存有位于指針所指向的參考字符串中的第一索引位置,若存有,根據指針所指向的參考字符串中的第一索引位置,確定指針所在的目標位置上替換得到的參考字符串中的第二索引位置,將第二索引位置存儲至臨時棧中;并判斷指針所指向的參考字符串的長度length是否大于2(Lmin-1),在指針所指向的參考字符串的長度length大于2(Lmin-1)時,在指針所在的目 標位置上的參考字符串中的第Lmin-1個字符處設置跳躍距離參數Length-2(Lmin-1)+1,以便在采用多模式匹配窗口對解壓后得到的原始明文數據進行有害模式串的匹配時,在參考字符串中的第Lmin-1個字符處跳躍Length-2(Lmin-1)+1個字符至第Length-(Lmin-1)+1個字符處進行模式串匹配;LZ77解壓滑動窗口的右邊界和多模式匹配窗口的右邊界之間的距離小于Lmin-1;Lmin表示有害模式串的最小長度,且為正整數;Length為LZ77解壓過程中指針所指向的參考字符串的長度;臨時棧中保存有至少一個TCP壓縮分片中與有害模式串匹配的模式串的索引位置;指針中包括指針所在的目標位置至指針指向的參考字符串的位置之間的第一距離,以及參考字符串的長度。
其中,防火墻或者網關服務器上預先保存有多個有害模式串。其中,LZ77解壓滑動窗口的長度具體可以為32KB。多模式匹配窗口的長度具體也可以為32KB。采用LZ77解壓滑動窗口對第一壓縮數據流進行LZ77解壓的過程中,根據第一壓縮數據流中的指針查詢預設的臨時棧獲取第一索引位置以及存儲第二索引位置的示意圖可以如圖2所示,在圖2中,指針所指向的參考字符串中的第一索引位置如參考字符串中的黑色豎線所在位置;指針所在的目標位置上替換得到的參考字符串中的第二索引位置如第一重復字符串中的黑色豎線所在位置,即臨時棧的虛線箭頭所指向的位置;第一重復字符串中的中間區(qū)域為要跳躍的區(qū)域;第一重復字符串的兩邊的區(qū)域為需要進行匹配的區(qū)域。
其中,解壓前,臨時棧中可以不包括索引位置信息。具體地,步驟103中判斷臨時棧中是否存有位于指針所指向的參考字符串中的第一索引位置的過程具體可以包括:獲取臨時棧中存儲的與有害模式串匹配的字符串的索引位置,索引位置包括:字符串的索引地址以及字符串的長度;判斷字符串的索引位置與指針是否滿足以下公式:
指針所在的目標位置-指針中的第一距離<=字符串的索引位置<=指針所在的目標位置-指針中的第一距離+指針中的參考字符串的長度;
若字符串的索引位置與指針滿足上述公式,則確定臨時棧中存有位于指針所指向的參考字符串中的第一索引位置。
例如,在臨時棧里面存儲有(10,3)、(20,4)、(25,1)、(40,2)索 引位置,現(xiàn)在分別有當前位置是70和100的指針(40,20)和(50,10)。在臨時棧中,索引位置(40,2)在指針(40,20)所指向的參考字符串的位置區(qū)間(30,50)內部,即(70-40<=40<=70-40+20),則在指針位置70處的指針(40,20)內部存在有害模式串的索引位置(80,2),因此在臨時棧中插入索引位置(80,2);同理在位置100處的指針(50,10)所指向的參考字符串的位置區(qū)間內部不存在有害模式串的索引位置。
106、若在對至少一個TCP壓縮分片全部解壓后,其所對應的原始明文數據中不含有與有害模式串匹配的字符串,則將TCP壓縮分片對應的gzip壓縮數據流發(fā)送至客戶端。
其中,若其所對應的原始明文數據中含有與有害模式串匹配的字符串,則防火墻或者網關服務器丟棄TCP壓縮分片對應的gzip壓縮數據流。
其中,步驟104中,至少一個TCP壓縮分片對應的原始明文數據為包括至少一個TCP壓縮分片的第一壓縮數據流對應的原始明文數據。
本實施例中,通過獲取經過LZ77壓縮和霍夫曼編碼的gzip壓縮數據流,查詢預設的霍夫曼樹,獲取有害模式串對應的目標二進制串,根據目標二進制串查詢gzip壓縮數據流,獲取gzip壓縮數據流中目標二進制串第一次的出現(xiàn)位置,對gzip壓縮數據流中出現(xiàn)位置之后的壓縮數據流進行霍夫曼解碼,得到經過LZ77壓縮的第一壓縮數據流;觸發(fā)多模式匹配窗口滑動,以推動LZ77解壓滑動窗口在第一壓縮數據流上的滑動,以實現(xiàn)采用LZ77解壓滑動窗口對第一壓縮數據流進行LZ77解壓的同時,采用多模式匹配窗口對解壓后得到的原始明文數據進行有害模式串的匹配;其中,針對第一壓縮數據流中的長指針,只做邊界匹配,并判斷臨時棧是否存有位于指針所指向的參考字符串中的索引位置,若有,確定指針所在的目標位置中的索引位置并存儲至臨時棧中,且LZ77解壓滑動窗口和多模式匹配窗口之間的距離小于預設距離閾值,從而實現(xiàn)邊進行LZ77解壓,邊進行跳躍性的多模匹配檢測,縮短了壓縮數據流的入侵或有害代碼檢測時間,提高了客戶端用戶上網體驗的速度。
圖3為本發(fā)明提供的基于HTTP靜態(tài)壓縮數據流的有害代碼檢測方法又一個實施例的流程圖,在圖1所示實施例的基礎上,步驟105中采用多模式 匹配窗口對解壓后得到的原始明文數據進行有害模式串的匹配的過程具體可以包括以下步驟:
1051、獲取原始明文數據中第i字節(jié)至第i+N-1字節(jié)組成的第一待匹配的字符塊。
其中,i為正整數,且初始時i等于1;N表示待匹配的字符塊的字節(jié)長度,且為正整數。
1052、判斷第一待匹配的字符塊中各字符上是否設置有跳躍距離參數,若第一待匹配的字符塊中各字符上均未設置有跳躍距離參數,則執(zhí)行步驟1053;若第一待匹配的字符塊中的字符上設置有跳躍距離參數,則執(zhí)行步驟1055。
1053、判斷第一待匹配的字符塊在預設的SHIFT表中是否存在對應的步長值,若第一待匹配的字符塊在預設的SHIFT表中不存在對應的步長值,則執(zhí)行步驟1054;若第一待匹配的字符塊在預設的SHIFT表中存在對應的步長值,則執(zhí)行步驟1056。
其中,在判斷第一待匹配的字符塊在預設的SHIFT表中是否存在對應的步長值之前,防火墻或者網關服務器可以根據有害模式串創(chuàng)建SHIFT表和哈希表。
創(chuàng)建SHIFT表的過程為,獲取有害模式串的最小長度Lmin,采用最小長度從各個有害模式串的前綴開始截取有害模式串的前Lmin個字符,根據有害模式串的前Lmin個字符中的各個字符塊,根據各個字符塊在前Lmin個字符的步長生成SHIFT表。然后根據包括字符塊的有害模式串的情況生成哈希表,哈希表中保存有字符塊以及對應的包括有字符塊的有害模式串。
例如,假設有害模式串包括:rainbow,shine,river,version,brush。截取前綴后的字符串,字符塊以及生成的SHIFT表見表1所示。
表1
其中,步長為0表示存在截取后的有害字符串的結尾字符與當前字符塊 是一致的。
1054、將i加Lmin-1,重復執(zhí)行步驟1051,直至判斷完成。
1055、將i加Length-2(Lmin-1)+1,重復執(zhí)行步驟1051,直至判斷完成。
1056、判斷待匹配的字符塊在預設的SHIFT表中存在對應的步長值是否為預設步長值;若待匹配的字符塊在預設的SHIFT表中存在對應的步長值是為預設步長值,則執(zhí)行步驟1057;若待匹配的字符塊在預設的SHIFT表中存在對應的步長值,但對應的步長值不是預設步長值,則執(zhí)行步驟1051。
其中,此處的預設步長值可以為0。
1057、獲取第i字節(jié)的前面Lmin-N個字節(jié)。
1058、將Lmin-N個字節(jié)添加至第一待匹配的字符塊前,以形成第二待匹配的字符塊。
1059、根據第一待匹配的字符塊查詢預設的哈希表,獲取包括第一待匹配的字符塊的第一有害模式串。
1060、判斷第二待匹配的字符塊與第一有害模式串是否匹配;然后執(zhí)行步驟1061;若第二待匹配的字符塊與第一有害模式串匹配,還執(zhí)行步驟1062。
其中,N表示待匹配的字符塊的字節(jié)長度,且為正整數;Lmin表示有害字符串的最小長度,且為正整數。
1061、將i加1,重復執(zhí)行步驟1051,直至判斷完成。
1062、將第二待匹配的字符塊的索引位置存儲至臨時棧中。
本實施例中,通過獲取經過LZ77壓縮和霍夫曼編碼的gzip壓縮數據流,查詢預設的霍夫曼樹,獲取有害模式串對應的目標二進制串,根據目標二進制串查詢gzip壓縮數據流,獲取gzip壓縮數據流中目標二進制串第一次的出現(xiàn)位置,對gzip壓縮數據流中出現(xiàn)位置之后的壓縮數據流進行霍夫曼解碼,得到經過LZ77壓縮的第一壓縮數據流;觸發(fā)多模式匹配窗口滑動,以推動LZ77解壓滑動窗口在第一壓縮數據流上的滑動,以實現(xiàn)采用LZ77解壓滑動窗口對第一壓縮數據流進行LZ77解壓的同時,采用多模式匹配窗口對解壓后得到的原始明文數據進行有害模式串的匹配;其中,針對第一壓縮數據流中的長指針,只做邊界匹配,并判斷臨時棧是否存有位于指針所指向的參考字符串中的索引位置,若有,確定指針所在的目標位置中的索引位置并存儲至臨時棧中;在用多模式匹配窗口對解壓后得到的原始明文數據進行有害模 式串的匹配的過程中,獲取原始明文數據中第i字節(jié)至第i+N-1字節(jié)組成的第一待匹配的字符塊,先判斷第一待匹配的字符塊中各字符上是否設置有跳躍距離參數,根據判斷結果確定是否跳躍,然后判斷第一待匹配的字符塊在預設的SHIFT表中是否存在對應的步長值,根據判斷結果確定是否存在與第一待匹配的字符塊對應的第二字符塊匹配的有害模式串,且LZ77解壓滑動窗口和多模式匹配窗口之間的距離小于預設距離閾值,從而實現(xiàn)邊進行LZ77解壓,邊進行跳躍性的多模匹配檢測,縮短了壓縮數據流的入侵或有害代碼檢測時間,提高了客戶端用戶上網體驗的速度。
本領域普通技術人員可以理解:實現(xiàn)上述各方法實施例的全部或部分步驟可以通過程序指令相關的硬件來完成。前述的程序可以存儲于一計算機可讀取存儲介質中。該程序在執(zhí)行時,執(zhí)行包括上述各方法實施例的步驟;而前述的存儲介質包括:ROM、RAM、磁碟或者光盤等各種可以存儲程序代碼的介質。
圖4為本發(fā)明提供的基于HTTP靜態(tài)壓縮數據流的有害代碼檢測裝置一個實施例的結構示意圖,如圖4所示,包括:
獲取模塊41,用于獲取互聯(lián)網服務器發(fā)送客戶端待接受的gzip壓縮數據流,gzip壓縮數據流為互聯(lián)網服務器將原始明文數據經過LZ77壓縮和霍夫曼編碼后得到的壓縮數據流;
查詢模塊42,用于查詢預設的霍夫曼樹,獲取有害模式串中各字符對應的二進制霍夫曼編碼,生成有害模式串對應的目標二進制串;
查詢模塊42,還用于根據目標二進制串查詢gzip壓縮數據流,獲取gzip壓縮數據流中目標二進制串第一次的出現(xiàn)位置;
解壓模塊43,用于對gzip壓縮數據流中出現(xiàn)位置之后的壓縮數據流進行霍夫曼解碼,得到經過LZ77壓縮的第一壓縮數據流,第一壓縮數據流中包括至少一個TCP壓縮分片;
觸發(fā)模塊44,用于觸發(fā)多模式匹配窗口滑動,以推動LZ77解壓滑動窗口在第一壓縮數據流上的滑動;
匹配模塊45,用于在采用LZ77解壓滑動窗口對第一壓縮數據流進行LZ77解壓的同時,采用多模式匹配窗口對解壓后得到的原始明文數據進行 有害模式串的匹配;其中,采用LZ77解壓滑動窗口對第一壓縮數據流進行LZ77解壓的過程中,根據第一壓縮數據流中的指針查詢預設的臨時棧,判斷臨時棧中是否存有位于指針所指向的參考字符串中的第一索引位置,若存有,根據指針所指向的參考字符串中的第一索引位置,確定指針所在的目標位置上替換得到的參考字符串中的第二索引位置,將第二索引位置存儲至臨時棧中;并判斷指針所指向的參考字符串的長度length是否大于2(Lmin-1),在指針所指向的參考字符串的長度length大于2(Lmin-1)時,在指針所在的目標位置上的參考字符串中的第Lmin-1個字符處設置跳躍距離參數Length-2(Lmin-1)+1,以便在采用多模式匹配窗口對解壓后得到的原始明文數據進行有害模式串的匹配時,在參考字符串中的第Lmin-1個字符處跳躍Length-2(Lmin-1)+1個字符至第Length-(Lmin-1)+1個字符處進行模式串匹配;LZ77解壓滑動窗口的右邊界和多模式匹配窗口的右邊界之間的距離小于Lmin-1;Lmin表示有害模式串的最小長度,且為正整數;Length為LZ77解壓過程中指針所指向的參考字符串的長度;臨時棧中保存有至少一個TCP壓縮分片中與有害模式串匹配的模式串的索引位置;指針中包括指針所在的目標位置至指針指向的參考字符串的位置之間的第一距離,以及參考字符串的長度;
發(fā)送模塊46,用于在對至少一個TCP壓縮分片全部解壓后,其所對應的原始明文數據中不包含與有害模式串匹配的字符串時,將TCP壓縮分片對應的gzip壓縮數據流發(fā)送至客戶端。
本發(fā)明提供的基于HTTP靜態(tài)壓縮數據流的有害代碼檢測裝置具體可以為位于互聯(lián)網服務器與客戶端之間的防火墻或者網關服務器。
具體地,匹配模塊45判斷臨時棧中是否存有位于指針所指向的參考字符串中的第一索引位置的過程具體可以包括:獲取臨時棧中存儲的與有害模式串匹配的字符串的索引位置,索引位置包括:字符串的索引地址以及字符串的長度;判斷字符串的索引位置與指針是否滿足以下公式:
指針所在的目標位置-指針中的第一距離<=字符串的索引位置<=指針所在的目標位置-指針中的第一距離+指針中的參考字符串的長度;
若字符串的索引位置與指針滿足上述公式,則確定臨時棧中存有位于指針所指向的參考字符串中的第一索引位置。
本實施例中,通過獲取經過LZ77壓縮和霍夫曼編碼的gzip壓縮數據流,查詢預設的霍夫曼樹,獲取有害模式串對應的目標二進制串,根據目標二進制串查詢gzip壓縮數據流,獲取gzip壓縮數據流中目標二進制串第一次的出現(xiàn)位置,對gzip壓縮數據流中出現(xiàn)位置之后的壓縮數據流進行霍夫曼解碼,得到經過LZ77壓縮的第一壓縮數據流;觸發(fā)多模式匹配窗口滑動,以推動LZ77解壓滑動窗口在第一壓縮數據流上的滑動,以實現(xiàn)采用LZ77解壓滑動窗口對第一壓縮數據流進行LZ77解壓的同時,采用多模式匹配窗口對解壓后得到的原始明文數據進行有害模式串的匹配;其中,針對第一壓縮數據流中的長指針,只做邊界匹配,并判斷臨時棧是否存有位于指針所指向的參考字符串中的索引位置,若有,確定指針所在的目標位置中的索引位置并存儲至臨時棧中,且LZ77解壓滑動窗口和多模式匹配窗口之間的距離小于預設距離閾值,從而實現(xiàn)邊進行LZ77解壓,邊進行跳躍性的多模匹配檢測,縮短了壓縮數據流的入侵或有害代碼檢測時間,提高了客戶端用戶上網體驗的速度。
進一步地,結合參考圖5,在圖4所示實施例的基礎上,匹配模塊45包括:獲取子模塊451、判斷子模塊452和添加子模塊453;
匹配模塊45采用多模式匹配窗口對解壓后得到的原始明文數據進行有害模式串的匹配中,獲取子模塊451,用于獲取原始明文數據中第i字節(jié)至第i+N-1字節(jié)組成的第一待匹配的字符塊;
判斷子模塊452,用于判斷第一待匹配的字符塊中各字符上是否設置有跳躍距離參數;
判斷子模塊452,還用于在第一待匹配的字符塊中各字符上均未設置有跳躍距離參數時,判斷第一待匹配的字符塊在預設的SHIFT表中是否存在對應的步長值,若第一待匹配的字符塊在預設的SHIFT表中不存在對應的步長值,將i加Lmin-1,重復上述步驟,直至判斷完成;
其中,i為正整數,且初始時i等于1;N表示待匹配的字符塊的字節(jié)長度,且為正整數;
判斷子模塊452,還用于在第一待匹配的字符塊在預設的SHIFT表中存在對應的步長值時,判斷待匹配的字符塊在預設的SHIFT表中存在對應的步 長值是否為預設步長值;
獲取子模塊451,還用于待匹配的字符塊在預設的SHIFT表中存在對應的步長值是為預設步長值時,獲取第i字節(jié)的前面Lmin-N個字節(jié);
添加子模塊453,用于將Lmin-N個字節(jié)添加至第一待匹配的字符塊前,以形成第二待匹配的字符塊;
獲取子模塊451,還用于根據第一待匹配的字符塊查詢預設的哈希表,獲取包括第一待匹配的字符塊的第一有害模式串;
判斷子模塊452,還用于判斷第二待匹配的字符塊與第一有害模式串是否匹配;
將i加1,重復上述步驟,直至判斷完成;
其中,N表示待匹配的字符塊的字節(jié)長度,且為正整數;Lmin表示有害模式串的最小長度,且為正整數;
其中,判斷子模塊452在判斷第一待匹配的字符塊在預設的SHIFT表中是否存在對應的步長值之前,防火墻或者網關服務器可以根據有害字符串創(chuàng)建SHIFT表和哈希表。
創(chuàng)建SHIFT表的過程為,獲取有害模式串的最小長度Lmin,采用最小長度從各個有害模式串的前綴開始截取有害模式串的前Lmin個字符,根據有害模式串的前Lmin個字符中的各個字符塊,根據各個字符塊在前Lmin個字符的步長生成SHIFT表。然后根據包括字符塊的有害模式串的情況生成哈希表,哈希表中保存有字符塊以及對應的包括有字符塊的有害字符串。
進一步地,獲取子模塊451,還用于在第一待匹配的字符塊中的字符上設置有跳躍距離參數時,將i加Length-2(Lmin-1)+1;并重新獲取第一待匹配的字符塊進行匹配。
進一步地,所述的裝置還可以包括:存儲模塊,存儲模塊用于,在第二待匹配的字符塊與第一有害模式串匹配時,將第二待匹配的字符塊的索引位置存儲至臨時棧中。
進一步地,判斷子模塊452判斷臨時棧中是否存有位于指針所指向的參考字符串中的第一索引位置中,判斷子模塊452具體用于,獲取臨時棧中存儲的與有害模式串匹配的字符串的索引位置,索引位置包括:字符串的索引地址以及字符串的長度;
判斷字符串的索引位置與指針是否滿足以下公式:
指針所在的目標位置-指針中的第一距離<=字符串的索引位置<=指針所在的目標位置-指針中的第一距離+指針中的參考字符串的長度;
若字符串的索引位置與指針滿足上述公式,則確定臨時棧中存有位于指針所指向的參考字符串中的第一索引位置。
本實施例中,通過獲取經過LZ77壓縮和霍夫曼編碼的gzip壓縮數據流,查詢預設的霍夫曼樹,獲取有害模式串對應的目標二進制串,根據目標二進制串查詢gzip壓縮數據流,獲取gzip壓縮數據流中目標二進制串第一次的出現(xiàn)位置,對gzip壓縮數據流中出現(xiàn)位置之后的壓縮數據流進行霍夫曼解碼,得到經過LZ77壓縮的第一壓縮數據流;觸發(fā)多模式匹配窗口滑動,以推動LZ77解壓滑動窗口在第一壓縮數據流上的滑動,以實現(xiàn)采用LZ77解壓滑動窗口對第一壓縮數據流進行LZ77解壓的同時,采用多模式匹配窗口對解壓后得到的原始明文數據進行有害模式串的匹配;其中,針對第一壓縮數據流中的長指針,只做邊界匹配,并判斷臨時棧是否存有位于指針所指向的參考字符串中的索引位置,若有,確定指針所在的目標位置中的索引位置并存儲至臨時棧中;在用多模式匹配窗口對解壓后得到的原始明文數據進行有害模式串的匹配的過程中,獲取原始明文數據中第i字節(jié)至第i+N-1字節(jié)組成的第一待匹配的字符塊,先判斷第一待匹配的字符塊中各字符上是否設置有跳躍距離參數,根據判斷結果確定是否跳躍,然后判斷第一待匹配的字符塊在預設的SHIFT表中是否存在對應的步長值,根據判斷結果確定是否存在與第一待匹配的字符塊對應的第二字符塊匹配的有害模式串,且LZ77解壓滑動窗口和多模式匹配窗口之間的距離小于預設距離閾值,從而實現(xiàn)邊進行LZ77解壓,邊進行跳躍性的多模匹配檢測,縮短了壓縮數據流的入侵或有害代碼檢測時間,提高了客戶端用戶上網體驗的速度。
最后應說明的是:以上各實施例僅用以說明本發(fā)明的技術方案,而非對其限制;盡管參照前述各實施例對本發(fā)明進行了詳細的說明,本領域的普通技術人員應當理解:其依然可以對前述各實施例所記載的技術方案進行修改,或者對其中部分或者全部技術特征進行等同替換;而這些修改或者替換,并不使相應技術方案的本質脫離本發(fā)明各實施例技術方案的范圍。