一種客戶端會話識別方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供一種客戶端會話識別方法及系統(tǒng),包括判斷客戶端發(fā)送來的http請求數(shù)據(jù)包中是否存在Cookie標(biāo)識;若存在,判斷客戶端發(fā)送來的http請求數(shù)據(jù)包中的Cookie標(biāo)識是否被偽造;若是,清除http請求數(shù)據(jù)包中的Cookie標(biāo)識,重新生成一個重定向到該http請求域名首頁的數(shù)據(jù)包并發(fā)往服務(wù)端,并添加Cookie標(biāo)識;若否,判斷Cookie標(biāo)識記錄的結(jié)果是否支持JavaScript;若支持,則判斷是否到達(dá)客戶端的驗證時間;若到達(dá)驗證時間,則根據(jù)超過設(shè)定的緩沖時間沒驗證完成、在設(shè)定的緩沖時間內(nèi)驗證完成和在設(shè)定的緩沖時間內(nèi)驗證未完成的情況進(jìn)行判斷驗證。本發(fā)明的客戶端會話識別方法及系統(tǒng)能夠使用客戶端Cookie唯一標(biāo)識來回溯整個客戶端的瀏覽行為。
【專利說明】
一種客戶端會話識別方法及系統(tǒng)
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及Web應(yīng)用安全防護(hù)的技術(shù)領(lǐng)域,特別是涉及一種客戶端會話識別方法。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)的廣泛普及,Web應(yīng)用平臺已經(jīng)逐漸成為互聯(lián)網(wǎng)信息交互的中心。隨之而來的是Web應(yīng)用面臨的越來越嚴(yán)重的安全威脅,如何保障Web應(yīng)用安全已經(jīng)成為一個重要的研究課題。其中,黑客們使用程序模擬用戶行為,進(jìn)行一些非法獲利的網(wǎng)絡(luò)活動,使得攻擊越來越具有模糊性。而隨著國家網(wǎng)絡(luò)攻擊的相關(guān)政策的推出,黑客們又頻繁使用IP代理模式進(jìn)行攻擊,使得攻擊越來越具有隱藏性。因此,如何快速識別攻擊程序行為、定位攻擊用戶、回溯攻擊請求是安全防護(hù)及監(jiān)測設(shè)備碰到的主要挑戰(zhàn)。
[0003]現(xiàn)有技術(shù)中,在識別自動化攻擊程序行為及回溯攻擊請求中,主要策略是根據(jù)IP地址及短時間內(nèi)的請求次數(shù)來識別程序行為及以IP做為基線來回溯整個攻擊行為。具體地,基于IP地址跟蹤客戶端的程序行為時,首先從客戶端發(fā)送來的數(shù)據(jù)包中提取IP和UA信息作為識別客戶端的唯一標(biāo)識;然后記錄這個唯一標(biāo)識,并在后續(xù)根據(jù)這個唯一標(biāo)識對客戶端行為進(jìn)行跟蹤,還可以對跟蹤時可能出現(xiàn)的各種情況設(shè)計對應(yīng)的處理方案。其中,UA為用戶代理(User Agent),是指瀏覽器等,UA信息包括硬件平臺、系統(tǒng)軟件、應(yīng)用軟件和用戶個人偏好。在X.400電子系統(tǒng)中,UA是一種對數(shù)據(jù)打包、創(chuàng)造分組頭,以及編址、傳遞消息的部件。需要說明的是,用戶代理并不是僅指瀏覽器,還包括搜索引擎。
[0004]因此,現(xiàn)有的識別自動化攻擊程序及回溯攻擊請求方案中,基本上是靠IP來定位攻擊請求。但是上述方案存在以下不足:
[0005](I)采用IP定位機制時,由于越來越多的攻擊是基于VPN代理上請求,存在難以準(zhǔn)確定位不同IP地址為同一個攻擊者的問題;
[0006](2)唯一標(biāo)識不夠細(xì)化,無法對用戶的唯一性作出準(zhǔn)確判斷;
[0007](3)基于請求閥值識別自動化程序機制時,由于此識別防護(hù)技術(shù)早已公開,存在難以識別有延時處理的程序的請求行為。
【發(fā)明內(nèi)容】
[0008]鑒于以上所述現(xiàn)有技術(shù)的缺點,本發(fā)明的目的在于提供一種客戶端會話識別方法及系統(tǒng),通過為客戶端添加Cookie唯一標(biāo)識來判斷瀏覽器類型、HTML解析支持情況、HTML5支持情況代碼,并以此來區(qū)分正常瀏覽和程序瀏覽,從而不使用IP地址,即可使用客戶端Cookie唯一標(biāo)識來回溯整個客戶端的瀏覽行為。
[0009]為實現(xiàn)上述目的及其他相關(guān)目的,本發(fā)明提供一種客戶端會話識別方法,應(yīng)用于服務(wù)端與客戶端之間,步驟S1、判斷客戶端發(fā)送來的http請求數(shù)據(jù)包中是否存在Cookie標(biāo)識;所述Cookie標(biāo)識用于記錄客戶端的http請求的信息;步驟S2、若存在,判斷客戶端發(fā)送來的http請求數(shù)據(jù)包中的Cookie標(biāo)識是否被偽造;若是,清除http請求數(shù)據(jù)包中的Cookie標(biāo)識,重新生成一個重定向到該http請求域名首頁的數(shù)據(jù)包并發(fā)往服務(wù)端,并添加Cookie標(biāo)識;若否,轉(zhuǎn)入步驟S3 ;步驟S3、判斷Cookie標(biāo)識記錄的結(jié)果是否支持JavaScript ;步驟S4、若Cookie標(biāo)識記錄的結(jié)果支持JavaScript,則執(zhí)行以下操作:a)判斷是否到達(dá)客戶端的驗證時間,若是,下發(fā)驗證代碼進(jìn)行驗證,轉(zhuǎn)入步驟b);若否,轉(zhuǎn)入步驟c);b)若超過設(shè)定的緩沖時間沒驗證完成,則記錄Cookie標(biāo)識,并清除驗證代碼的下發(fā)次數(shù)記錄,更新上次驗證時間,流程結(jié)束;若在設(shè)定的緩沖時間內(nèi)驗證完成,則記錄Cookie標(biāo)識,并清除驗證代碼的下發(fā)次數(shù)記錄,更新上次驗證時間,流程結(jié)束;若在設(shè)定的緩沖時間內(nèi)驗證未完成,則當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,下發(fā)驗證代碼,更新驗證代碼的下發(fā)次數(shù)記錄,否則直接放行;流程結(jié)束;c)直接放行,流程結(jié)束。
[00?0]根據(jù)上述的客戶端會話識別方法,其中:所述Cookie標(biāo)識包括客戶端標(biāo)識、Cookie標(biāo)識下發(fā)時間、上次驗證時間、瀏覽器類型、html解析參數(shù)、JavaScript支持參數(shù)和Localstorage/UserData 參數(shù)。
[0011]根據(jù)上述的客戶端會話識別方法,其中:所述步驟SI中,若不存在Cookie標(biāo)識,則判斷哈希緩沖區(qū)是否存在所述http請求的UA和IP的哈希值記錄;
[0012]若是,對于客戶端持續(xù)不接收Cookie標(biāo)識的情況,記錄該http請求的IP,直接放行,流程結(jié)束;否則,當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,添加Cookie標(biāo)識并下發(fā)驗證代碼;否則僅添加Cookie標(biāo)識,流程結(jié)束;
[0013]若否,初始化哈希緩沖區(qū);當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,添加Cookie標(biāo)識并下發(fā)驗證代碼;否則僅添加Cookie標(biāo)識,流程結(jié)束。
[0014]進(jìn)一步地,根據(jù)上述的客戶端會話識別方法,其中:當(dāng)客戶端超過預(yù)定次數(shù)不接收UA和IP的哈希值記錄時,判定客戶端持續(xù)不接收Cookie標(biāo)識。
[0015]根據(jù)上述的客戶端會話識別方法,其中:所述步驟S3中,當(dāng)Cookie標(biāo)識記錄的結(jié)果不支持JavaScript時,執(zhí)行以下步驟:
[0016]a)判斷判斷代碼的下發(fā)次數(shù)記錄是否存在;若是,轉(zhuǎn)入步驟b);若否,轉(zhuǎn)入步驟c);
[0017]b)當(dāng)判斷代碼的下發(fā)次數(shù)大于等于預(yù)定次數(shù)時,刪除判斷代碼的下發(fā)次數(shù)記錄,轉(zhuǎn)入步驟c);否則當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,下發(fā)判斷代碼,更新判斷代碼的下發(fā)次數(shù)記錄,否則直接放行,流程結(jié)束;
[0018]c)判斷是否到達(dá)客戶端的驗證時間;若是,下發(fā)驗證代碼進(jìn)行驗證,轉(zhuǎn)入步驟d);若否,轉(zhuǎn)入步驟e);
[0019]d)若超過設(shè)定的緩沖時間沒驗證完成,則記錄Cookie標(biāo)識,并清除驗證代碼的下發(fā)次數(shù)記錄,更新上次驗證時間,流程結(jié)束;
[0020]若在設(shè)定的緩沖時間內(nèi)驗證完成,清除驗證代碼的下發(fā)次數(shù)記錄,并更新上次驗證時間,流程結(jié)束;
[0021]若在設(shè)定的緩沖時間內(nèi)驗證未完成,則當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,下發(fā)驗證代碼,更新驗證代碼的下發(fā)次數(shù)記錄;否則直接放行;流程結(jié)束;
[0022]e)直接放行,流程結(jié)束。
[0023]根據(jù)上述的客戶端會話識別方法,其中:所述步驟S3中,通過以下步驟判斷Cookie標(biāo)識記錄的結(jié)果是否支持JavaScr ipt:
[0024]a)判斷JS支持情況發(fā)起的請求中的Cookie標(biāo)識是否被篡改;若是,轉(zhuǎn)入b);若否,轉(zhuǎn)入c);
[0025]b)返回回響字符串O至客戶端;
[0026]c)判斷JS支持情況發(fā)起的請求回來的數(shù)據(jù)是否被篡改;若是,返回回響字符串O至客戶端;若否,再判斷JS支持情況發(fā)起的請求回來的數(shù)據(jù)是否支持Local storage/UserData;若支持,更新Localstorage/UserData參數(shù),返回回響字符串I至客戶端,并生成新的Cookie標(biāo)識,刪除判斷代碼的下發(fā)次數(shù)記錄;若不支持,更新Localstorage/UserData參數(shù),返回回響字符串O至客戶端,并生成新的Cookie標(biāo)識,刪除判斷代碼的下發(fā)次數(shù)記錄。
[0027]同時,本發(fā)明還提供一種客戶端會話識別系統(tǒng),應(yīng)用于服務(wù)端與客戶端之間,包括第一模塊、第二模塊、第三模塊和第四模塊;
[0028]所述第一模塊用于判斷客戶端發(fā)送來的http請求數(shù)據(jù)包中是否存在Cookie標(biāo)識;所述Cooki e標(biāo)識用于記錄客戶端的http請求的信息;
[0029]所述第二模塊用于在客戶端發(fā)送來的http請求數(shù)據(jù)包中存在Cookie標(biāo)識時,判斷客戶端發(fā)送來的http請求數(shù)據(jù)包中的Cookie標(biāo)識是否被偽造;并在Cookie標(biāo)識被偽造時,清除http請求數(shù)據(jù)包中的Cookie標(biāo)識,重新生成一個重定向到該http請求域名首頁的數(shù)據(jù)包并發(fā)往服務(wù)端,并添加Cookie標(biāo)識;
[°03°]所述第三模塊用于在Cookie標(biāo)識沒有被偽造時,判斷Cookie標(biāo)識記錄的結(jié)果是否支持 JavaScript ;
[0031]所述第四模塊用于在Cookie標(biāo)識記錄的結(jié)果支持JavaScript時,執(zhí)行以下操作:
[0032]a)判斷是否到達(dá)客戶端的驗證時間,若是,下發(fā)驗證代碼進(jìn)行驗證轉(zhuǎn)入步驟b);若否,轉(zhuǎn)入步驟c);
[0033]b)若超過設(shè)定的緩沖時間沒驗證完成,則記錄Cookie標(biāo)識,并清除驗證代碼的下發(fā)次數(shù)記錄,更新上次驗證時間;
[0034]若在設(shè)定的緩沖時間內(nèi)驗證完成,則記錄Cookie標(biāo)識,并清除驗證代碼的下發(fā)次數(shù)記錄,更新上次驗證時間;
[0035]若在設(shè)定的緩沖時間內(nèi)驗證未完成,則當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,下發(fā)驗證代碼,更新驗證代碼的下發(fā)次數(shù)記錄,否則直接放行;
[0036]c)直接放行。
[0037I根據(jù)上述的客戶端會話識別系統(tǒng),其中:所述Cookie標(biāo)識包括客戶端標(biāo)識、Cookie標(biāo)識下發(fā)時間、上次驗證時間、瀏覽器類型、html解析參數(shù)、JavaScript支持參數(shù)和Localstorage/UserData 參數(shù)。
[0038]根據(jù)上述的客戶端會話識別系統(tǒng),其中:還包括第一處理模塊,所述第一處理模塊用于在客戶端發(fā)送來的http請求數(shù)據(jù)包中不存在Cookie標(biāo)識時,判斷哈希緩沖區(qū)是否存在該http請求的UA和IP的哈希值記錄;
[0039]若是,對于客戶端持續(xù)不接收Cookie標(biāo)識的情況,記錄該http請求的IP,直接放行;否則,當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,添加Cookie標(biāo)識并下發(fā)驗證代碼;否則僅添加Cookie標(biāo)識;
[0040]若否,初始化hash緩沖區(qū);當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,添加Cookie標(biāo)識并下發(fā)驗證代碼;否則僅添加Cookie標(biāo)識
[0041]進(jìn)一步地,根據(jù)上述的客戶端會話識別系統(tǒng),其中:所述第一處理模塊中,當(dāng)客戶端超過預(yù)定次數(shù)不接收UA和IP的哈希值記錄時,判定客戶端持續(xù)不接收Cookie標(biāo)識。
[0042]根據(jù)上述的客戶端會話識別系統(tǒng),其中:還包括第二處理模塊,所述第二處理模塊用于在Cookie標(biāo)識記錄的結(jié)果不支持JavaScript時,執(zhí)行以下操作:
[0043]a)判斷判斷代碼的下發(fā)次數(shù)記錄是否存在;若是,轉(zhuǎn)入步驟b);若否,轉(zhuǎn)入步驟C)。
[0044]b)當(dāng)判斷代碼的下發(fā)次數(shù)大于等于預(yù)定次數(shù)時,刪除判斷代碼的下發(fā)次數(shù)記錄,轉(zhuǎn)入步驟c);否則當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,下發(fā)判斷代碼,更新判斷代碼的下發(fā)次數(shù)記錄,否則直接放行;
[0045]c)判斷是否到達(dá)客戶端的驗證時間;若是,下發(fā)驗證代碼進(jìn)行驗證,轉(zhuǎn)入步驟d);若否,轉(zhuǎn)入步驟e);
[0046]d)若超過設(shè)定的緩沖時間沒驗證完成,則記錄Cookie標(biāo)識,并清除驗證代碼的下發(fā)次數(shù)記錄,更新上次驗證時間;
[0047]若在設(shè)定的緩沖時間內(nèi)驗證完成,清除驗證代碼的下發(fā)次數(shù)記錄,并更新上次驗證時間;
[0048]若在設(shè)定的緩沖時間內(nèi)驗證未完成,則當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,下發(fā)驗證代碼,更新驗證代碼的下發(fā)次數(shù)記錄;否則直接放行;
[0049]e)直接放行。
[0050]根據(jù)上述的客戶端會話識別系統(tǒng),其中:所述第三模塊中,通過以下步驟判斷Cookie標(biāo)識記錄的結(jié)果是否支持JavaScr ipt:
[0051]a)判斷JS支持情況發(fā)起的請求中的Cookie標(biāo)識是否被篡改;若是,轉(zhuǎn)入b);若否,轉(zhuǎn)入c);
[0052]b)返回回響字符串O至客戶端;
[0053]c)判斷JS支持情況發(fā)起的請求回來的數(shù)據(jù)是否被篡改;若是,返回回響字符串O至客戶端;若否,再判斷JS支持情況發(fā)起的請求回來的數(shù)據(jù)是否支持Local storage/UserData;若支持,更新Localstorage/UserData參數(shù),返回回響字符串I至客戶端,并生成新的Cookie標(biāo)識,刪除判斷代碼的下發(fā)次數(shù)記錄;若不支持,更新Localstorage/UserData參數(shù),返回回響字符串O至客戶端,并生成新的Cookie標(biāo)識,刪除判斷代碼的下發(fā)次數(shù)記錄。
[0054]如上所述,本發(fā)明的客戶端會話識別方法及系統(tǒng),具有以下有益效果:
[0055](I)能夠有效地識別出自動化程序?qū)崿F(xiàn)的HTTP請求和用戶使用瀏覽器訪問的請求,從而進(jìn)一步實現(xiàn)識別和阻止惡意刷單、爬蟲等行為,以及在事后,對一次攻擊行為進(jìn)行有效回溯,從而找到漏洞問題的原始位置;
[0056](2)對于攻擊行為,當(dāng)發(fā)現(xiàn)攻擊請求時,能夠利用客戶端Cookie唯一標(biāo)識定位到用戶,對其后續(xù)的請求進(jìn)行相關(guān)處理,還能夠利用客戶端Cookie唯一標(biāo)識中校驗支持情況來區(qū)分程序和正常用戶的請求,進(jìn)而對其后續(xù)的請求進(jìn)行相關(guān)處理;
[0057](3)對于回溯攻擊,能夠利用請求中所帶的客戶端Cookie唯一標(biāo)識作為基線,回溯整個攻擊請求,從而清楚地了解攻擊者的目的。
【附圖說明】
[0058]圖1顯示為本發(fā)明的客戶端會話識別方法的流程圖;
[0059]圖2顯示為本發(fā)明中判斷Cookie標(biāo)識記錄的結(jié)果是否支持JavaScript的流程圖;
[0060]圖3顯示為本發(fā)明中驗證Localstorage/UserData支持情況的流程圖;
[0061]圖4顯示為本發(fā)明的客戶端會話識別系統(tǒng)的結(jié)構(gòu)示意圖。
【具體實施方式】
[0062]以下通過特定的具體實例說明本發(fā)明的實施方式,本領(lǐng)域技術(shù)人員可由本說明書所揭露的內(nèi)容輕易地了解本發(fā)明的其他優(yōu)點與功效。本發(fā)明還可以通過另外不同的【具體實施方式】加以實施或應(yīng)用,本說明書中的各項細(xì)節(jié)也可以基于不同觀點與應(yīng)用,在沒有背離本發(fā)明的精神下進(jìn)行各種修飾或改變。
[0063]需要說明的是,本實施例中所提供的圖示僅以示意方式說明本發(fā)明的基本構(gòu)想,遂圖式中僅顯示與本發(fā)明中有關(guān)的組件而非按照實際實施時的組件數(shù)目、形狀及尺寸繪制,其實際實施時各組件的型態(tài)、數(shù)量及比例可為一種隨意的改變,且其組件布局型態(tài)也可能更為復(fù)雜。
[0064]本發(fā)明的客戶端會話識別方法及系統(tǒng)應(yīng)用于服務(wù)端與客戶端之間,通過對客戶端發(fā)送過來的http請求數(shù)據(jù)包的Cookie標(biāo)識進(jìn)行增加、刪除、修改等操作,對于客戶端持續(xù)不接收服務(wù)端設(shè)定的SetCookie或不支持Cookie的情況、判斷Cookie標(biāo)識是否被篡改情況、客戶端對JavaScript (JS)的支持情況以及是否需要進(jìn)行驗證之前判斷支持情況等可能出現(xiàn)的事件進(jìn)行相關(guān)的處理。其中,對于Cookie標(biāo)識采用相關(guān)加密算法以實現(xiàn)防偽造,并具有一定的隨機性;通過下發(fā)相關(guān)代碼判斷和驗證客戶端的一些基本情況,從而使整個判斷和驗證過程具有迷惑性,對下發(fā)的代碼做隨機選擇處理并對結(jié)果數(shù)據(jù)進(jìn)行校驗。
[0065]參照圖1,本發(fā)明的客戶端會話識別方法,應(yīng)用于服務(wù)端與客戶端之間,包括以下步驟:
[ΟΟ??]步驟S1、判斷客戶端發(fā)送來的http請求數(shù)據(jù)包中是否存在Cookie標(biāo)識。
[0067]正常情況下,客戶端發(fā)送來的http請求數(shù)據(jù)包中應(yīng)該包含Cookie標(biāo)識。但是,在數(shù)據(jù)包被篡改,或者客戶端瀏覽器不支持Cookie標(biāo)識的情況下,客戶端發(fā)送來的http請求數(shù)據(jù)包中則不包含Cookie標(biāo)識。
[0068]其中,Co ok i e標(biāo)識是指Web應(yīng)用防護(hù)系統(tǒng)(網(wǎng)站應(yīng)用級入侵防御系統(tǒng),WebApplicat1n Firewall,WAF)主動下發(fā)給客戶端的一個Cookie字段。在本發(fā)明中,Cookie標(biāo)識由WAF自定義,與服務(wù)端無關(guān)。也就是說,服務(wù)端發(fā)出的數(shù)據(jù)包,經(jīng)由WAF添加一個Cookie標(biāo)識后再下發(fā)給客戶端。之所以要添加的Cookie標(biāo)識,是因為Cookie標(biāo)識記錄關(guān)聯(lián)著一些客戶端請求的相關(guān)信息。將Cookie標(biāo)識發(fā)給客戶端后,客戶端在接收之后會保存在瀏覽器里,下次請求會帶上這個Cookie標(biāo)識,以便跟蹤記錄整個請求過程。
[0069]其中,Cookie標(biāo)識包括客戶端標(biāo)識、Cookie標(biāo)識下發(fā)時間、上次驗證時間、瀏覽器類型、html解析參數(shù)、JS支持參數(shù)和Localstorage/UserData參數(shù)。
[0070]具體地,Cookie標(biāo)識字段如下:
[0071 ]〈客戶端標(biāo)識〉,〈Cookie標(biāo)識下發(fā)時間〉,〈上次驗證時間〉,〈瀏覽器類型〉,〈html解析參數(shù)〉,〈JS支持參數(shù)〉,參數(shù)或IE的Userdata參數(shù)〉
[0072]〈客戶端標(biāo)識>:將當(dāng)前的時間戳在加上5位數(shù)的隨機數(shù)(10+5),在15位數(shù)字的前后分別加上 FWLA 和 AFG。例如,F(xiàn)WLA144677665612345AFG,時間戳:1446776656,隨機數(shù):12345)
[0073]〈Cookie標(biāo)識下發(fā)時間>:WAF下發(fā)Cookie標(biāo)識時的時間戳。
[0074]〈上次驗證時間>:驗證時的時間戳。
[0075]〈瀏覽器類型〉:根據(jù)UA設(shè)置對應(yīng)的值。
[0076]〈html解析參數(shù)〉:O表示初始狀態(tài)且不支持html解析;I表示支持html解析。
[0077]〈JS支持參數(shù)〉:O表示初始狀態(tài)且不支持JS ; I表示支持JS。
[0078]〈抓11^5的Localstorage參數(shù)或IE的Userdata參數(shù)〉:O表示初始狀態(tài)且不支持Localstorage/UserData; I表不支持Localstorage/UserData。
[0079]步驟S2、若存在,判斷客戶端發(fā)送來的http請求數(shù)據(jù)包中的Cookie標(biāo)識是否被偽造;若是,清除http請求數(shù)據(jù)包中的Cookie標(biāo)識,重新生成一個重定向到該http請求域名首頁的數(shù)據(jù)包并發(fā)往服務(wù)端,并添加Cookie標(biāo)識;若否,轉(zhuǎn)入步驟S3。
[0080]優(yōu)選地,若客戶端發(fā)送來的http請求數(shù)據(jù)包中不存在Cookie標(biāo)識,則判斷哈希(hash)緩沖區(qū)是否存在該http請求的UA和IP的哈希值記錄;
[0081]若是,對于客戶端持續(xù)不接收Cookie標(biāo)識的情況,記錄該http請求的IP,直接放行,流程結(jié)束;否則,當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,添加Cookie標(biāo)識并下發(fā)驗證代碼;否則僅添加Cookie標(biāo)識,流程結(jié)束;
[0082]若否,初始化hash緩沖區(qū);當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,添加Cookie標(biāo)識并下發(fā)驗證代碼;否則僅添加Cookie標(biāo)識,流程結(jié)束。
[0083]具體地,通過設(shè)置判斷變量setCookie來表示是否要添加Cookie標(biāo)識。當(dāng)setCookie取值為I時,表示添加Cookie標(biāo)識;setCookie取值為2時,表示不添加Cookie標(biāo)識。
[0084]其中,hash緩沖區(qū)是指程序在內(nèi)存開設(shè)的一塊存儲區(qū)域,用于存儲UA和IP的哈希值記錄。
[0085]優(yōu)選地,當(dāng)客戶端超過預(yù)定次數(shù)不接收UA和IP的哈希值記錄時,判定客戶端持續(xù)不接收Cookie標(biāo)識。優(yōu)選地,預(yù)定次數(shù)為3次。每訪問一次UA和IP的哈希值記錄,將其訪問次數(shù)加I。
[0086]步驟S3、判斷Cookie標(biāo)識記錄的結(jié)果是否支持JS。
[0087]其中,JS即JavaScript,是一種由Netscape的LiveScript發(fā)展而來的腳本語言,主要目的是為了解決服務(wù)器終端語言,比如Perl,遺留的速度問題。當(dāng)時服務(wù)端需要對數(shù)據(jù)進(jìn)行驗證,由于網(wǎng)絡(luò)速度相當(dāng)緩慢,只有28.8kbps,驗證步驟浪費的時間太多。于是Netscape的瀏覽器Navigator加入了 JavaScript,提供了數(shù)據(jù)驗證的基本功能。
[0088]如圖2所示,JS判斷代碼用于判斷JS支持情況。其中,若JS支持情況發(fā)起的請求回來,則說明支持JS。具體地,JS判斷代碼包括以下步驟:
[0089]a)判斷J S支持情況發(fā)起的請求中的C ο ο k i e標(biāo)識是否被篡改;若是,轉(zhuǎn)入b);若否,轉(zhuǎn)入c);
[0090]b)返回回響字符串O至客戶端;
[0091]c)判斷JS支持情況發(fā)起的請求回來的數(shù)據(jù)是否被篡改;若是,返回回響字符串O至客戶端;若否,再判斷JS支持情況發(fā)起的請求回來的數(shù)據(jù)是否支持html5特性或IE特性(SP是否支持Localstorage/UserData);若是,更新Localstorage/UserData參數(shù),返回回響字符串I至客戶端,并生成新的Cookie標(biāo)識,刪除下發(fā)判斷代碼的下發(fā)次數(shù)記錄;若否,更新Localstorage/UserData參數(shù),返回回響字符串O至客戶端,并生成新的Cookie標(biāo)識,刪除下發(fā)判斷代碼的下發(fā)次數(shù)記錄。[0092 ]步驟S4、若支持JS,則執(zhí)行以下操作:
[0093]a)判斷是否到達(dá)客戶端的驗證時間,若是,下發(fā)驗證代碼進(jìn)行驗證,轉(zhuǎn)入步驟b);若否,轉(zhuǎn)入步驟C)。
[0094]具體地,為了判斷客戶端對JS、HTML、H5特性支持情況,需要每隔一段時間驗證一次是否出現(xiàn)變化。
[0095]若客戶端環(huán)境改變就會出現(xiàn)驗證異常,驗證異常時則會根據(jù)當(dāng)前客戶端記錄相關(guān)?目息O
[0096]優(yōu)選地,設(shè)定兩次驗證之間的最小時間差為24小時。若距離上次驗證的時間未超過24小時,則判定未到達(dá)驗證時間。
[0097]b)若超過設(shè)定的緩沖時間沒驗證完成,則記錄Cookie標(biāo)識,并清除驗證代碼的下發(fā)次數(shù)記錄,更新上次驗證時間,流程結(jié)束;
[0098]若在設(shè)定的緩沖時間內(nèi)驗證完成,則記錄Cookie標(biāo)識,并清除驗證代碼的下發(fā)次數(shù)記錄,更新上次驗證時間,流程結(jié)束;
[0099]若在設(shè)定的緩沖時間內(nèi)驗證未完成,則當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,下發(fā)驗證代碼,更新驗證代碼的下發(fā)次數(shù)記錄,否則直接放行;流程結(jié)束。
[0100]其中,在內(nèi)存開設(shè)一塊存儲區(qū)域來作為下發(fā)驗證代碼的緩沖區(qū),下發(fā)驗證代碼的緩沖區(qū)用于存儲驗證代碼下發(fā)的次數(shù)Time2。若驗證代碼下發(fā)的次數(shù)未達(dá)到預(yù)定次數(shù),則判斷在設(shè)定的緩沖時間內(nèi)驗證未完成。優(yōu)選地,預(yù)定次數(shù)為3。
[0101]c)直接放行,流程結(jié)束。
[0102]優(yōu)選地,當(dāng)Cookie標(biāo)識記錄的結(jié)果不支持JS時,執(zhí)行以下步驟:
[0103]a)判斷判斷代碼的下發(fā)次數(shù)記錄是否存在;若是,轉(zhuǎn)入步驟b);若否,轉(zhuǎn)入步驟C)。
[0104]其中,在內(nèi)存開設(shè)一塊存儲區(qū)域來作為下發(fā)判斷代碼的緩沖區(qū),下發(fā)判斷代碼的緩沖區(qū)用于存儲判斷代碼下發(fā)的次數(shù)Timel。
[0105]b)當(dāng)判斷代碼的下發(fā)次數(shù)大于等于預(yù)定次數(shù)時,刪除判斷代碼的下發(fā)次數(shù)記錄,轉(zhuǎn)入步驟c);否則當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,下發(fā)判斷代碼,更新判斷代碼的下發(fā)次數(shù)記錄,否則直接放行,流程結(jié)束。
[0106]優(yōu)選地,預(yù)定次數(shù)為3次。
[0107]c)判斷是否到達(dá)客戶端的驗證時間;若是,下發(fā)驗證代碼進(jìn)行驗證,轉(zhuǎn)入步驟d);若否,轉(zhuǎn)入步驟e)。
[0108]優(yōu)選地,設(shè)定兩次驗證之間的最小時間差為24小時。若距離上次驗證的時間未超過24小時,則判定未到達(dá)驗證時間。
[0109]d)若超過設(shè)定的緩沖時間沒驗證完成,則記錄Cookie標(biāo)識,并清除驗證代碼的下發(fā)次數(shù)記錄,更新上次驗證時間,流程結(jié)束;
[0110]若在設(shè)定的緩沖時間內(nèi)驗證完成,清除驗證代碼的下發(fā)次數(shù)記錄,并更新上次驗證時間,流程結(jié)束;
[0111]若在設(shè)定的緩沖時間內(nèi)驗證未完成,則當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,下發(fā)驗證代碼,更新驗證代碼的下發(fā)次數(shù)記錄;否則直接放行;流程結(jié)束。
[0112]e)直接放行,流程結(jié)束。
[0113]下面對本發(fā)明中涉及的判斷代碼和驗證代碼進(jìn)行詳細(xì)的說明。其中,判斷代碼包括html判斷代碼和JS判斷代碼;驗證代碼包括html驗證代碼、JS驗證代碼和Local storage/UserData驗證代碼。
[0114]html判斷代碼用于判斷html解析的支持情況。其中,若html解析支持情況發(fā)起的請求回來,則說明支持HTML解析。具體地,html判斷代碼包括以下步驟:
[0115]a)判斷HTML解析支持情況發(fā)起的請求中Cookie標(biāo)識是否被修改;若是,轉(zhuǎn)入b);若否,轉(zhuǎn)入c);
[0116]b)直接放行;
[0117]c)判斷html請求回來的數(shù)據(jù)是否被篡改;若是,直接放行;若否,更新下發(fā)驗證代碼的緩沖區(qū),并生成新的Cookie標(biāo)識。
[0118]html驗證代碼用于驗證html解析的支持情況。其中,若驗證html解析支持情況發(fā)起的請求回來,則說明支持HTML解析。具體地,html驗證代碼包括以下步驟:
[0119]a)若驗證html解析支持情況發(fā)起的請求中Cookie標(biāo)識是否被篡改;若是,轉(zhuǎn)入b);若否,轉(zhuǎn)入c;
[0120]b)直接放行;
[0121]c)判斷驗證html解析支持情況發(fā)起的請求回來的數(shù)據(jù)是否被篡改;若是,直接放行;若否,再判斷驗證html解析支持情況發(fā)起的請求回來的數(shù)據(jù)的支持情況與Cookie標(biāo)識中的支持情況是否一致;若是,更新上次驗證時間;若否,記錄Cookie標(biāo)識,更新上次驗證時間。
[0122]JS驗證代碼用于驗證JS支持情況。其中,若驗證JS支持情況發(fā)起的請求回來,則說明支持JS。具體地,J S驗證代碼包括以下步驟:
[0?23] a)判斷驗證JS支持情況發(fā)起的請求中的Cookie標(biāo)識是否被篡改;若是,轉(zhuǎn)入b);若否,轉(zhuǎn)入c ;
[0124]b)直接放行;
[0125]C)判斷驗證JS支持情況發(fā)起的請求回來的數(shù)據(jù)是否被篡改;若是,直接放行;若否,再判斷驗證J S支持情況發(fā)起的請求回來的數(shù)據(jù)中的J S支持情況與Cooki e標(biāo)識中的JS支持情況是否一致;若是,清除下發(fā)驗證代碼的緩沖區(qū)中的相關(guān)記錄,更新上次驗證時間;若否,清除下發(fā)驗證代碼的緩沖區(qū)中的相關(guān)記錄,更新上次驗證時間,并記錄Cookie標(biāo)識。
[0126]需要說明的是,如果一開始判斷是支持JS,后續(xù)的所有驗證都是不支持JS,那么就懷疑有可能此Cookie被移動到不支持的環(huán)境里去運行了。在本發(fā)明中,驗證的主要目的就是為了驗證上一次的判斷結(jié)果。故對驗證結(jié)果只是記錄處理,暫時不做任何操作。
[0127]Localstorage/UserData 驗證代碼用于驗證 Localstorage/UserData 支持情況。其中,若驗證Localstorage/UserData支持情況發(fā)起的請求回來,貝Ij說明支持Local storage/UserData。具體地,如圖3所示,Localstorage/UserData驗證代碼包括以下步驟:
[0128]a)判斷驗證Localstorage/UserData支持情況發(fā)起的請求中的Cookie標(biāo)識是否被篡改;若是,轉(zhuǎn)入b);若否,轉(zhuǎn)入c);
[0129]b)直接放行;
c)判斷驗證Localstorage/UserData支持情況發(fā)起的請求回來的數(shù)據(jù)是否被篡改;轉(zhuǎn)入Cl);若否,轉(zhuǎn)入c2);
[0131]cl)直接放行;
[0132]c2 )判斷驗證Local storage/UserData支持情況發(fā)起的請求回來的數(shù)據(jù)中Localstorage/UserData是否為空(即html5特性或IE特性的字段是否為空);
[ΟΙ33] 若是,判斷驗證Local storage/UserData支持情況發(fā)起的請求回來的數(shù)據(jù)中的支持情況與Cookie標(biāo)識中的支持情況是否一致;若是,清除驗證代碼的下發(fā)次數(shù)記錄,記錄Cookie標(biāo)識,更新驗證時間;若否,清除驗證代碼的下發(fā)次數(shù)記錄,更新驗證時間;
[0134]若否,判斷驗證Local storage/UserData支持情況發(fā)起的請求回來的數(shù)據(jù)中的支持情況與Cookie標(biāo)識中的支持情況是否一致;若是,清除驗證代碼的下發(fā)次數(shù)記錄,記錄Cookie標(biāo)識,更新驗證時間;若否,當(dāng)驗證Local storage/UserData支持情況發(fā)起的請求回來的數(shù)據(jù)中的客戶端標(biāo)識與Cookie標(biāo)識中的客戶端標(biāo)識一致時,清除驗證代碼的下發(fā)次數(shù)記錄,更新驗證時間;否則清除驗證代碼的下發(fā)次數(shù)記錄,記錄Cookie標(biāo)識,更新驗證時間。
[0135]其中,驗證Localstorage/UserData支持情況發(fā)起的請求回來的數(shù)據(jù)中Local storage/UserData不為空,說明此次驗證支持html5特性或支持IE特性;驗證Local storage/UserData支持情況發(fā)起的請求回來的數(shù)據(jù)中Local storage/UserData為空,說明此次驗證不支持html 5特性或不支持IE特性。
[0136]需要說明的是,現(xiàn)在主流瀏覽器基本都是支持html5特性的(h5的localstorage/IE的userdata)。若支持,則可以做進(jìn)一步的數(shù)據(jù)存放,存放到用戶的瀏覽器中,該數(shù)據(jù)亦可作為跟蹤客戶端的一個數(shù)據(jù)支撐。若不支持,則無需后續(xù)操作,只記錄一個結(jié)果,此不支持記錄亦可作為本發(fā)明判斷該請求者是瀏覽器還是程序的信息之一。
[0137]參照圖4,本發(fā)明的客戶端會話識別系統(tǒng),應(yīng)用于服務(wù)端與客戶端之間,包括第一模塊、第二模塊、第三模塊和第四模塊。
[0138]第一模塊用于判斷客戶端發(fā)送來的http請求數(shù)據(jù)包中是否存在Cookie標(biāo)識。
[0139]其中,C ο ο k i e標(biāo)識是指W e b應(yīng)用防護(hù)系統(tǒng)(網(wǎng)站應(yīng)用級入侵防御系統(tǒng),W e bApplicat1n Firewall,WAF)主動下發(fā)給客戶端的一個Cookie字段。在本發(fā)明中,Cookie標(biāo)識為自定義,與服務(wù)端無關(guān)。
[0140]其中,Cookie標(biāo)識包括客戶端標(biāo)識、Cookie標(biāo)識下發(fā)時間、上次驗證時間、瀏覽器類型、html解析參數(shù)、JS支持參數(shù)和Local storage/UserData參數(shù)。
[0141]具體地,Cookie標(biāo)識字段如下:
[0142]〈客戶端標(biāo)識〉,〈Cookie標(biāo)識下發(fā)時間〉,〈上次驗證時間〉,〈瀏覽器類型〉,〈html解析參數(shù)〉,〈JS支持參數(shù)〉,參數(shù)或IE的Userdata參數(shù)〉
[0143]〈客戶端標(biāo)識>:將當(dāng)前的時間戳在加上5位數(shù)的隨機數(shù)(10+5),在15位數(shù)字的前后分別加上 FWLA 和 AFG。例如,F(xiàn)WLA144677665612345AFG,時間戳:1446776656,隨機數(shù):12345)
[0144]〈Cookie標(biāo)識下發(fā)時間〉:下發(fā)Cookie標(biāo)識時的時間戳。
[0145]〈上次驗證時間>:驗證時的時間戳。
[0146]〈瀏覽器類型>:根據(jù)UA設(shè)置對應(yīng)的值。
[OH7] 〈html解析參數(shù)>:O表示初始狀態(tài)且不支持html解析;I表示支持html解析。
[OH8] 〈JS支持參數(shù)>:O表示初始狀態(tài)且不支持JS; I表示支持JS。
[0149]〈抓11^5的Localstorage參數(shù)或IE的Userdata參數(shù)〉:O表示初始狀態(tài)且不支持Localstorage/UserData; I表不支持Localstorage/UserData。
[0150]第二模塊與第一模塊相連,用于在客戶端發(fā)送來的http請求數(shù)據(jù)包中存在Cookie標(biāo)識時,判斷客戶端發(fā)送來的http請求數(shù)據(jù)包中的Cookie標(biāo)識是否被偽造;并在Cookie標(biāo)識被偽造時,清除http請求數(shù)據(jù)包中的Cookie標(biāo)識,重新生成一個重定向到該http請求域名首頁的數(shù)據(jù)包并發(fā)往服務(wù)端,并添加Cookie標(biāo)識。
[0151]優(yōu)選地,還包括第一處理模塊,該第一處理模塊用于在客戶端發(fā)送來的http請求數(shù)據(jù)包中不存在Cookie標(biāo)識時,判斷哈希(hash)緩沖區(qū)是否存在該http請求的UA和IP的哈希值記錄;
[0152]若是,對于客戶端持續(xù)不接收Cookie標(biāo)識的情況,記錄該http請求的IP,直接放行;否則,當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,添加Cookie標(biāo)識并下發(fā)驗證代碼;否則僅添加Cookie標(biāo)識;
[0153]若否,初始化hash緩沖區(qū);當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,添加Cookie標(biāo)識并下發(fā)驗證代碼;否則僅添加Cookie標(biāo)識。
[0154]具體地,通過設(shè)置判斷變量setCookie來表示是否要添加Cookie標(biāo)識。當(dāng)setCookie取值為I時,表示添加Cookie標(biāo)識;setCookie取值為2時,表示不添加Cookie標(biāo)識。
[0155]其中,hash緩沖區(qū)是指程序在內(nèi)存開設(shè)的一塊存儲區(qū)域,用于存儲UA和IP的哈希值記錄。
[0156]優(yōu)選地,當(dāng)客戶端超過預(yù)定次數(shù)不接收UA和IP的哈希值記錄時,判定客戶端持續(xù)不接收Cookie標(biāo)識。優(yōu)選地,預(yù)定次數(shù)為3次。每訪問一次UA和IP的哈希值記錄,將其訪問次數(shù)加I。
[0157]第三模塊與第二模塊相連,用于在Cookie標(biāo)識沒有被偽造時,判斷Cookie標(biāo)識是否支持JS。
[0158]其中,JS即JavaScript,是一種由Netscape的LiveScript發(fā)展而來的腳本語言,主要目的是為了解決服務(wù)器終端語言,比如Perl,遺留的速度問題。當(dāng)時服務(wù)端需要對數(shù)據(jù)進(jìn)行驗證,由于網(wǎng)絡(luò)速度相當(dāng)緩慢,只有28.8kbps,驗證步驟浪費的時間太多。于是Netscape的瀏覽器Navigator加入了 JavaScript,提供了數(shù)據(jù)驗證的基本功能。
[0159]第四模塊與第三模塊相連,用于在Cookie標(biāo)識記錄的結(jié)果支持JS時,執(zhí)行以下操作:
[0160]a)判斷是否到達(dá)客戶端的驗證時間,若是,下發(fā)驗證代碼進(jìn)行驗證,轉(zhuǎn)入步驟b);若否,轉(zhuǎn)入步驟C)。
[0161 ]優(yōu)選地,設(shè)定兩次驗證之間的最小時間差為24小時。若距離上次驗證的時間未超過24小時,則判定未到達(dá)驗證時間。
[0162]b)若超過設(shè)定的緩沖時間沒驗證完成,則記錄Cookie標(biāo)識,并清除驗證代碼的下發(fā)次數(shù)記錄,更新上次驗證時間;
[0163]若在設(shè)定的緩沖時間內(nèi)驗證完成,則記錄Cookie標(biāo)識,并清除驗證代碼的下發(fā)次數(shù)記錄,更新上次驗證時間;
[0164]若在設(shè)定的緩沖時間內(nèi)驗證未完成,則當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,下發(fā)驗證代碼,更新驗證代碼的下發(fā)次數(shù)記錄,否則直接放行。
[0165]其中,在內(nèi)存開設(shè)一塊存儲區(qū)域來作為下發(fā)驗證代碼的緩沖區(qū),下發(fā)驗證代碼的緩沖區(qū)用于存儲驗證代碼下發(fā)的次數(shù)Time2。若驗證代碼下發(fā)的次數(shù)未達(dá)到預(yù)定次數(shù),則判斷在設(shè)定的緩沖時間內(nèi)驗證未完成。優(yōu)選地,預(yù)定次數(shù)為3。
[0166]c)直接放行。
[0167]優(yōu)選地,還包括第二處理模塊,該第二處理模塊用于在Cookie標(biāo)識記錄的結(jié)果不支持JS時,執(zhí)行以下操作:
[0168]a)判斷判斷代碼的下發(fā)次數(shù)記錄是否存在;若是,轉(zhuǎn)入步驟b);若否,轉(zhuǎn)入步驟C)。
[0169]其中,在內(nèi)存開設(shè)一塊存儲區(qū)域來作為下發(fā)判斷代碼的緩沖區(qū),下發(fā)判斷代碼的緩沖區(qū)用于存儲判斷代碼下發(fā)的次數(shù)Timel。
[0170]b)當(dāng)判斷代碼的下發(fā)次數(shù)大于等于預(yù)定次數(shù)時,刪除判斷代碼的下發(fā)次數(shù)記錄,轉(zhuǎn)入步驟c);否則當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,下發(fā)判斷代碼,更新判斷代碼的下發(fā)次數(shù)記錄,否則直接放行。
[0171 ]優(yōu)選地,預(yù)定次數(shù)為3次。
[0172]c)判斷是否到達(dá)客戶端的驗證時間;若是,下發(fā)驗證代碼進(jìn)行驗證,轉(zhuǎn)入步驟d);若否,轉(zhuǎn)入步驟e)。
[0173]優(yōu)選地,設(shè)定兩次驗證之間的最小時間差為24小時。若距離上次驗證的時間未超過24小時,則判定未到達(dá)驗證時間。
[0174]d)若超過設(shè)定的緩沖時間沒驗證完成,則記錄Cookie標(biāo)識,并清除驗證代碼的下發(fā)次數(shù)記錄,更新上次驗證時間;
[0175]若在設(shè)定的緩沖時間內(nèi)驗證完成,清除驗證代碼的下發(fā)次數(shù)記錄,并更新上次驗證時間;
[0176]若在設(shè)定的緩沖時間內(nèi)驗證未完成,則當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,下發(fā)驗證代碼,更新驗證代碼的下發(fā)次數(shù)記錄;否則直接放行。
[0177]e)直接放行。
[0178]綜上所述,本發(fā)明的客戶端會話識別方法能夠有效地識別出自動化程序?qū)崿F(xiàn)的HTTP請求和用戶使用瀏覽器訪問的請求,從而進(jìn)一步實現(xiàn)識別和阻止惡意刷單、爬蟲等行為,以及在事后,對一次攻擊行為進(jìn)行有效回溯,從而找到漏洞問題的原始位置;對于攻擊行為,當(dāng)發(fā)現(xiàn)攻擊請求時,能夠利用客戶端Cookie唯一標(biāo)識定位到用戶,對其后續(xù)的請求進(jìn)行相關(guān)處理,還能夠利用客戶端Cookie唯一標(biāo)識中校驗支持情況來區(qū)分程序和正常用戶的請求,進(jìn)而對其后續(xù)的請求進(jìn)行相關(guān)處理;對于回溯攻擊,能夠利用請求中所帶的客戶端Cookie唯一標(biāo)識作為基線,回溯整個攻擊請求,從而清楚地了解攻擊者的目的。所以,本發(fā)明有效克服了現(xiàn)有技術(shù)中的種種缺點而具高度產(chǎn)業(yè)利用價值。
[0179]上述實施例僅例示性說明本發(fā)明的原理及其功效,而非用于限制本發(fā)明。任何熟悉此技術(shù)的人士皆可在不違背本發(fā)明的精神及范疇下,對上述實施例進(jìn)行修飾或改變。因此,舉凡所屬技術(shù)領(lǐng)域中具有通常知識者在未脫離本發(fā)明所揭示的精神與技術(shù)思想下所完成的一切等效修飾或改變,仍應(yīng)由本發(fā)明的權(quán)利要求所涵蓋。
【主權(quán)項】
1.一種客戶端會話識別方法,應(yīng)用于服務(wù)端與客戶端之間,其特征在于:包括以下步驟: 步驟S1、判斷客戶端發(fā)送來的http請求數(shù)據(jù)包中是否存在Cookie標(biāo)識;所述Cookie標(biāo)識用于記錄客戶端的http請求的信息; 步驟S2、若存在,判斷客戶端發(fā)送來的http請求數(shù)據(jù)包中的Cookie標(biāo)識是否被偽造;若是,清除http請求數(shù)據(jù)包中的Cookie標(biāo)識,重新生成一個重定向到該http請求域名首頁的數(shù)據(jù)包并發(fā)往服務(wù)端,并添加Cookie標(biāo)識;若否,轉(zhuǎn)入步驟S3; 步驟S3、判斷Cookie標(biāo)識記錄的結(jié)果是否支持JavaScript; 步驟S4、若Cookie標(biāo)識記錄的結(jié)果支持JavaScript,則執(zhí)行以下操作: a)判斷是否到達(dá)客戶端的驗證時間,若是,下發(fā)驗證代碼進(jìn)行驗證,轉(zhuǎn)入步驟b);若否,轉(zhuǎn)入步驟c); b)若超過設(shè)定的緩沖時間沒驗證完成,則記錄Cookie標(biāo)識,并清除驗證代碼的下發(fā)次數(shù)記錄,更新上次驗證時間,流程結(jié)束; 若在設(shè)定的緩沖時間內(nèi)驗證完成,則記錄Cookie標(biāo)識,并清除驗證代碼的下發(fā)次數(shù)記錄,更新上次驗證時間,流程結(jié)束; 若在設(shè)定的緩沖時間內(nèi)驗證未完成,則當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,下發(fā)驗證代碼,更新驗證代碼的下發(fā)次數(shù)記錄,否則直接放行;流程結(jié)束; c)直接放行,流程結(jié)束。2.根據(jù)權(quán)利要求1所述的客戶端會話識別方法,其特征在于:所述Cookie標(biāo)識包括客戶端標(biāo)識、Cookie標(biāo)識下發(fā)時間、上次驗證時間、瀏覽器類型、html解析參數(shù)、JavaScript支持參數(shù)和 Localstorage/UserData 參數(shù)。3.根據(jù)權(quán)利要求1所述的客戶端會話識別方法,其特征在于:所述步驟SI中,若不存在Cookie標(biāo)識,則判斷哈希緩沖區(qū)是否存在所述http請求的UA和IP的哈希值記錄; 若是,對于客戶端持續(xù)不接收Cookie標(biāo)識的情況,記錄該http請求的IP,直接放行,流程結(jié)束;否則,當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,添加Cookie標(biāo)識并下發(fā)驗證代碼;否則僅添加Cookie標(biāo)識,流程結(jié)束; 若否,初始化哈希緩沖區(qū);當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,添加Cookie標(biāo)識并下發(fā)驗證代碼;否則僅添加Cookie標(biāo)識,流程結(jié)束。4.根據(jù)權(quán)利要求3所述的客戶端會話識別方法,其特征在于:當(dāng)客戶端超過預(yù)定次數(shù)不接收UA和IP的哈希值記錄時,判定客戶端持續(xù)不接收Cookie標(biāo)識。5.根據(jù)權(quán)利要求1所述的客戶端會話識別方法,其特征在于:所述步驟S3中,當(dāng)Cookie標(biāo)識記錄的結(jié)果不支持JavaScript時,執(zhí)行以下步驟: a)判斷判斷代碼的下發(fā)次數(shù)記錄是否存在;若是,轉(zhuǎn)入步驟b);若否,轉(zhuǎn)入步驟c); b)當(dāng)判斷代碼的下發(fā)次數(shù)大于等于預(yù)定次數(shù)時,刪除判斷代碼的下發(fā)次數(shù)記錄,轉(zhuǎn)入步驟c);否則當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,下發(fā)判斷代碼,更新判斷代碼的下發(fā)次數(shù)記錄,否則直接放行,流程結(jié)束; c)判斷是否到達(dá)客戶端的驗證時間;若是,下發(fā)驗證代碼進(jìn)行驗證,轉(zhuǎn)入步驟d);若否,轉(zhuǎn)入步驟e); d)若超過設(shè)定的緩沖時間沒驗證完成,則記錄Cookie標(biāo)識,并清除驗證代碼的下發(fā)次數(shù)記錄,更新上次驗證時間,流程結(jié)束; 若在設(shè)定的緩沖時間內(nèi)驗證完成,清除驗證代碼的下發(fā)次數(shù)記錄,并更新上次驗證時間,流程結(jié)束; 若在設(shè)定的緩沖時間內(nèi)驗證未完成,則當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,下發(fā)驗證代碼,更新驗證代碼的下發(fā)次數(shù)記錄;否則直接放行;流程結(jié)束; e)直接放行,流程結(jié)束。6.根據(jù)權(quán)利要求1所述的客戶端會話識別方法,其特征在于:所述步驟S3中,通過以下步驟判斷Cookie標(biāo)識記錄的結(jié)果是否支持JavaScript: a)判斷JS支持情況發(fā)起的請求中的Cookie標(biāo)識是否被篡改;若是,轉(zhuǎn)入b);若否,轉(zhuǎn)入c); b)返回回響字符串O至客戶端; c)判斷JS支持情況發(fā)起的請求回來的數(shù)據(jù)是否被篡改;若是,返回回響字符串O至客戶端;若否,再判斷JS支持情況發(fā)起的請求回來的數(shù)據(jù)是否支持Localstorage/UserData;若支持,更新Localstorage/UserData參數(shù),返回回響字符串I至客戶端,并生成新的Cookie標(biāo)識,刪除判斷代碼的下發(fā)次數(shù)記錄;若不支持,更新Localstorage/UserData參數(shù),返回回響字符串O至客戶端,并生成新的Cookie標(biāo)識,刪除判斷代碼的下發(fā)次數(shù)記錄。7.—種客戶端會話識別系統(tǒng),應(yīng)用于服務(wù)端與客戶端之間,其特征在于:包括第一模塊、第二模塊、第三模塊和第四模塊; 所述第一模塊用于判斷客戶端發(fā)送來的http請求數(shù)據(jù)包中是否存在Cookie標(biāo)識;所述Cooki e標(biāo)識用于記錄客戶端的http請求的信息; 所述第二模塊用于在客戶端發(fā)送來的http請求數(shù)據(jù)包中存在Cookie標(biāo)識時,判斷客戶端發(fā)送來的http請求數(shù)據(jù)包中的Cookie標(biāo)識是否被偽造;并在Cookie標(biāo)識被偽造時,清除http請求數(shù)據(jù)包中的Cooki e標(biāo)識,重新生成一個重定向到該http請求域名首頁的數(shù)據(jù)包并發(fā)往服務(wù)端,并添加Cookie標(biāo)識; 所述第三模塊用于在Cookie標(biāo)識沒有被偽造時,判斷Cookie標(biāo)識記錄的結(jié)果是否支持JavaScript; 所述第四模塊用于在Cookie標(biāo)識記錄的結(jié)果支持JavaScript時,執(zhí)行以下操作: a)判斷是否到達(dá)客戶端的驗證時間,若是,下發(fā)驗證代碼進(jìn)行驗證轉(zhuǎn)入步驟b);若否,轉(zhuǎn)入步驟c); b)若超過設(shè)定的緩沖時間沒驗證完成,則記錄Cookie標(biāo)識,并清除驗證代碼的下發(fā)次數(shù)記錄,更新上次驗證時間; 若在設(shè)定的緩沖時間內(nèi)驗證完成,則記錄Cookie標(biāo)識,并清除驗證代碼的下發(fā)次數(shù)記錄,更新上次驗證時間; 若在設(shè)定的緩沖時間內(nèi)驗證未完成,則當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,下發(fā)驗證代碼,更新驗證代碼的下發(fā)次數(shù)記錄,否則直接放行; c)直接放行。8.根據(jù)權(quán)利要求7所述的客戶端會話識別系統(tǒng),其特征在于:所述Cookie標(biāo)識包括客戶端標(biāo)識、Cookie標(biāo)識下發(fā)時間、上次驗證時間、瀏覽器類型、html解析參數(shù)、JavaScript支持參數(shù)和 Localstorage/UserData 參數(shù)。9.根據(jù)權(quán)利要求7所述的客戶端會話識別系統(tǒng),其特征在于:還包括第一處理模塊,所述第一處理模塊用于在客戶端發(fā)送來的http請求數(shù)據(jù)包中不存在Cookie標(biāo)識時,判斷哈希緩沖區(qū)是否存在該http請求的UA和IP的哈希值記錄; 若是,對于客戶端持續(xù)不接收Cookie標(biāo)識的情況,記錄該http請求的IP,直接放行;否貝IJ,當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,添加Cookie標(biāo)識并下發(fā)驗證代碼;否則僅添加Cookie標(biāo)識; 若否,初始化hash緩沖區(qū);當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,添加Cookie標(biāo)識并下發(fā)驗證代碼;否則僅添加Cookie標(biāo)識。10.根據(jù)權(quán)利要求9所述的客戶端會話識別系統(tǒng),其特征在于:所述第一處理模塊中,當(dāng)客戶端超過預(yù)定次數(shù)不接收UA和IP的哈希值記錄時,判定客戶端持續(xù)不接收Cookie標(biāo)識。11.根據(jù)權(quán)利要求7所述的客戶端會話識別系統(tǒng),其特征在于:還包括第二處理模塊,所述第二處理模塊用于在Cookie標(biāo)識記錄的結(jié)果不支持JavaScript時,執(zhí)行以下操作: a)判斷判斷代碼的下發(fā)次數(shù)記錄是否存在;若是,轉(zhuǎn)入步驟b);若否,轉(zhuǎn)入步驟C)。 b)當(dāng)判斷代碼的下發(fā)次數(shù)大于等于預(yù)定次數(shù)時,刪除判斷代碼的下發(fā)次數(shù)記錄,轉(zhuǎn)入步驟c);否則當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,下發(fā)判斷代碼,更新判斷代碼的下發(fā)次數(shù)記錄,否則直接放行; c)判斷是否到達(dá)客戶端的驗證時間;若是,下發(fā)驗證代碼進(jìn)行驗證,轉(zhuǎn)入步驟d);若否,轉(zhuǎn)入步驟e); d)若超過設(shè)定的緩沖時間沒驗證完成,則記錄Cookie標(biāo)識,并清除驗證代碼的下發(fā)次數(shù)記錄,更新上次驗證時間; 若在設(shè)定的緩沖時間內(nèi)驗證完成,清除驗證代碼的下發(fā)次數(shù)記錄,并更新上次驗證時間; 若在設(shè)定的緩沖時間內(nèi)驗證未完成,則當(dāng)服務(wù)端返回的數(shù)據(jù)包格式是html格式時,下發(fā)驗證代碼,更新驗證代碼的下發(fā)次數(shù)記錄;否則直接放行; e)直接放行。12.根據(jù)權(quán)利要求7所述的客戶端會話識別系統(tǒng),其特征在于:所述第三模塊中,通過以下步驟判斷Cookie標(biāo)識記錄的結(jié)果是否支持JavaScript: a)判斷JS支持情況發(fā)起的請求中的Cookie標(biāo)識是否被篡改;若是,轉(zhuǎn)入b);若否,轉(zhuǎn)入c); b)返回回響字符串O至客戶端; c)判斷JS支持情況發(fā)起的請求回來的數(shù)據(jù)是否被篡改;若是,返回回響字符串O至客戶端;若否,再判斷JS支持情況發(fā)起的請求回來的數(shù)據(jù)是否支持Localstorage/UserData;若支持,更新Localstorage/UserData參數(shù),返回回響字符串I至客戶端,并生成新的Cookie標(biāo)識,刪除判斷代碼的下發(fā)次數(shù)記錄;若不支持,更新Localstorage/UserData參數(shù),返回回響字符串O至客戶端,并生成新的Cookie標(biāo)識,刪除判斷代碼的下發(fā)次數(shù)記錄。
【文檔編號】H04L29/08GK105897694SQ201610178575
【公開日】2016年8月24日
【申請日】2016年3月25日
【發(fā)明人】洪珂, 王梟卿, 黃梅芬, 陳東加
【申請人】網(wǎng)宿科技股份有限公司