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