XSS漏洞檢測方法、系統(tǒng)和Web服務器的制造方法
【技術(shù)領域】
[0001]本發(fā)明涉及一種Web (網(wǎng)絡、互聯(lián)網(wǎng))應用測試工具,特別是涉及一種Web應用中的XSS (又叫CSS (Cross Site Script),跨站腳本攻擊)漏洞檢測方法和系統(tǒng)。
【背景技術(shù)】
[0002]目前Web應用中的現(xiàn)有的XSS漏洞檢測工具僅通過固定地、簡單的XSS測試用例進行循環(huán)提交測試,判斷返回網(wǎng)頁正文中是否包含對應的字符串,進而判斷是否存在XSS漏洞。這種簡單的測試方式僅僅只能夠工作在一些邏輯簡單的網(wǎng)頁中,并獲得可以接受的測試效果。
[0003]但是隨著Web應用技術(shù)愈加復雜,現(xiàn)階段大部分網(wǎng)站的網(wǎng)頁正文的形式日趨復雜,而且越來越多的網(wǎng)頁中內(nèi)嵌有腳本,例如JS腳本,所以這種XSS漏洞檢測方式已較難應對現(xiàn)階段的大多數(shù)網(wǎng)站,而且這種XSS漏洞檢測方式不能對網(wǎng)頁中JS腳本進行解析,因此對于通過JS渲染觸發(fā)的XSS漏洞的檢測能力幾乎為零。
【發(fā)明內(nèi)容】
[0004]本發(fā)明要解決的技術(shù)問題是為了克服現(xiàn)有技術(shù)的XSS漏洞檢測方式不適用于復雜網(wǎng)頁正文的形式以及網(wǎng)頁內(nèi)嵌腳本的缺陷,采用一種XSS漏洞檢測方法和系統(tǒng),通過特定字符對網(wǎng)頁中XSS漏洞位置和特征進行動態(tài)判斷,并通過邏輯觸發(fā)腳本事件來匹配出適用于復雜網(wǎng)頁的XSS漏洞的測試用例,從而提高XSS漏洞檢測效率和準確性。
[0005]本發(fā)明是通過下述技術(shù)方案來解決上述技術(shù)問題的:
[0006]本發(fā)明提供了一種XSS漏洞檢測方法,其特點是,所述XSS漏洞檢測方法包括以下步驟:
[0007]隨機生成一第一特征字符串,將所述第一特征字符串填充至一 GET參數(shù)(網(wǎng)頁正文請求參數(shù))中,并請求網(wǎng)頁;
[0008]獲得的網(wǎng)頁正文作為第一網(wǎng)頁正文后,在檢測到所述第一網(wǎng)頁正文中包含所述第一特征字符串時,生成包含一組特殊符號的一第二特征字符串,并將所述第二特征字符串填充至所述GET參數(shù)中,并再次請求網(wǎng)頁;
[0009]將再次獲得的網(wǎng)頁正文作為第二網(wǎng)頁正文后,通過QTwebkit (基于開源的WebKitengine的QT (跨平臺C++圖形用戶界面應用程序開發(fā)框架)模塊)的API接口(應用程序編程接口)獲取第一網(wǎng)頁正文和第二網(wǎng)頁正文的DOM樹;
[0010]分別遍歷第一網(wǎng)頁正文和第二網(wǎng)頁正文的DOM (Document Object Model,文件對象模型)樹的各個DOM對象節(jié)點,篩選出具有數(shù)據(jù)交互的DOM對象,并通過QTwebkit的API接口觸發(fā)各個具有數(shù)據(jù)交互的DOM對象的腳本事件;
[0011]遍歷第一網(wǎng)頁正文和第二網(wǎng)頁正文中DOM樹的各個DOM對象節(jié)點,并記錄第一網(wǎng)頁正文中所有出現(xiàn)所述第一特征字符串的DOM對象節(jié)點的數(shù)據(jù)位置以及記錄第二網(wǎng)頁正文中對應于第一網(wǎng)頁正文中出現(xiàn)所述第一特征字符串的各個DOM對象節(jié)點中被濾除的特殊符號;
[0012]將所述第二特征字符串、數(shù)據(jù)位置和被濾除的特殊符號組合為多組包括所述第二特征字符串以及至少一個數(shù)據(jù)位置和一個被濾除的特殊符號的測試數(shù)據(jù);
[0013]將各組測試數(shù)據(jù)加入XSS漏洞檢測的測試用例,并通過XSS漏洞檢測方式對根據(jù)網(wǎng)頁請求獲得的網(wǎng)頁正文進行XSS漏洞檢測。
[0014]本發(fā)明不但通過特定字符對網(wǎng)頁中XSS漏洞位置和特征進行動態(tài)判斷,而且還對網(wǎng)頁正文中腳本事件進行邏輯觸發(fā),從而得到邏輯觸發(fā)部分的XSS漏洞,進而匹配出適用于檢測腳本事件的XSS漏洞的測試用例。
[0015]其中所述GET參數(shù)是XSS漏洞檢測中常用的網(wǎng)頁正文請求參數(shù),QTwebkit是現(xiàn)有的一種有奇趣開發(fā)的QT平臺中基于WebKit engine的QT模塊,所以此處不再贅述。
[0016]而且所述DOM對象節(jié)點是現(xiàn)有技術(shù)的網(wǎng)頁正文中能夠與腳本事件關聯(lián)的對象,本發(fā)明正是通過對所有DOM對象節(jié)點中腳本事件的遍歷和觸發(fā)來獲得能夠表征DOM對象中腳本導致的XSS漏洞的測試用例。
[0017]并且,本發(fā)明在獲得所述第二特征字符串、數(shù)據(jù)位置和被濾除的特殊符號后,通過任意的排列組合方式獲得包括第二特征字符串和至少一組由數(shù)據(jù)位置和被濾除的特殊符號組成的數(shù)據(jù)的測試數(shù)據(jù),其中用戶可以根據(jù)實際應用場合和環(huán)境等來設定所采用的排列組合所述第二特征字符串、數(shù)據(jù)位置和被濾除的特殊符號的方式,本發(fā)明中只要能夠獲得包括第二特征字符串和至少一組由數(shù)據(jù)位置和被濾除的特殊符號組成的數(shù)據(jù),這種形式的測試數(shù)據(jù)就可以實現(xiàn)生成動態(tài)地并且適用于檢測腳本事件的XSS漏洞的測試用例。
[0018]此外,本發(fā)明中在獲得各組測試用例后,通過套用傳統(tǒng)的XSS漏洞檢測方式實現(xiàn)對網(wǎng)頁的XSS漏洞檢測。所以本發(fā)明中XSS漏洞檢測方式可以采用現(xiàn)有的任意的XSS漏洞檢測方式套用本發(fā)明生成的各組測試用例。
[0019]較佳地,所述腳本事件為JavaScript (—種腳本程序)事件。
[0020]較佳地,所述XSS漏洞檢測方法還包括:
[0021]在遍歷第一網(wǎng)頁正文和第二網(wǎng)頁正文的DOM樹的各個DOM對象節(jié)點,篩選出具有數(shù)據(jù)交互的DOM對象時,所述QTwebkit的QT引擎將各個具有數(shù)據(jù)交互的DOM對象的腳本中的Eval函數(shù)上加載一 Hook函數(shù);
[0022]并在通過QTwebkit的API接口觸發(fā)各個具有數(shù)據(jù)交互的DOM對象的腳本事件時,Hook函數(shù)輸出Eval函數(shù)執(zhí)行信息。
[0023]其中本發(fā)明中所述Eval函數(shù)和Hook函數(shù)均是現(xiàn)有技術(shù)中腳本程序和消息處理機制中常用函數(shù),而且所述鉤子函數(shù)(Hook函數(shù))實際上是現(xiàn)有的一種處理消息的程序段,通過系統(tǒng)調(diào)用,把它掛入系統(tǒng)。每當特定的消息發(fā)出,在沒有到達目的窗口前,鉤子程序就先捕獲該消息,亦即鉤子函數(shù)先得到控制權(quán)。這時鉤子函數(shù)即可以加工處理(改變)該消息。
[0024]所以本發(fā)明中利用Hook函數(shù)來監(jiān)視記錄并輸出腳本事件中Eval函數(shù)的執(zhí)行狀態(tài)信息,從而提高腳本事件中Eval執(zhí)行漏洞檢測的準確性。
[0025]本發(fā)明還提供了一種Web服務器,其特點是,所述Web使用如上所述的XSS漏洞檢測方法。
[0026]本發(fā)明又提供了一種XSS漏洞檢測系統(tǒng),其特點是,所述XSS漏洞檢測系統(tǒng)包括:
[0027]一網(wǎng)頁請求模塊,用于隨機生成一第一特征字符串,將所述第一特征字符串填充至一 GET參數(shù)中,并請求網(wǎng)頁;
[0028]一特征字符檢測模塊,用于獲得所述網(wǎng)頁正文作為第一網(wǎng)頁正文后,在檢測到所述第一網(wǎng)頁正文中包含所述第一特征字符串時,生成包含一組特殊符號的一第二特征字符串,并通過所述網(wǎng)頁請求模塊將所述第二特征字符串填充至所述GET參數(shù)中,并再次請求所述網(wǎng)頁;
[0029]一 DOM樹獲取模塊,用于將獲得所述網(wǎng)頁正文作為第二網(wǎng)頁正文后,通過QTwebkit的API接口獲取第一網(wǎng)頁正文和第二網(wǎng)頁正文的DOM樹;
[0030]一 DOM篩選模塊,用于分別遍歷第一網(wǎng)頁正文和第二網(wǎng)頁正文的DOM樹的各個DOM對象節(jié)點,篩選出具有數(shù)據(jù)交互的DOM對象,并通過QTwebkit的API接口觸發(fā)各個具有數(shù)據(jù)交互的DOM對象的腳本事件;
[0031]一位置和濾除字符檢測模塊,用于遍歷第一網(wǎng)頁正文和第二網(wǎng)頁正文中DOM樹的各個DOM對象節(jié)點,并記錄第一網(wǎng)頁正文中所有出現(xiàn)所述第一特征字符串的DOM對象節(jié)點的數(shù)據(jù)位置以及記錄第二網(wǎng)頁正文中對應于第一網(wǎng)頁正文中出現(xiàn)所述第一特征字符串的各個DOM對象節(jié)點中被濾除的特殊符號;
[0032]一測試數(shù)據(jù)生成模塊,用于將所述第