亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Web應(yīng)用程序搜索功能的組合測試*

        2019-11-12 05:41:04呂成成曾凡平
        計(jì)算機(jī)與生活 2019年11期
        關(guān)鍵詞:測試用例字符應(yīng)用程序

        呂成成,張 龍,鄧 茜,曾凡平,3+,嚴(yán) 俊,張 健

        1.中國科學(xué)技術(shù)大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)系,合肥 230026

        2.中國科學(xué)院 軟件研究所 計(jì)算機(jī)科學(xué)國家重點(diǎn)實(shí)驗(yàn)室,北京 100190

        3.安徽省計(jì)算與通訊軟件重點(diǎn)實(shí)驗(yàn)室,合肥 230026

        1 引言

        隨著互聯(lián)網(wǎng)的快速發(fā)展,Web應(yīng)用程序迅速進(jìn)入普通用戶的視野[1]。為了方便用戶查詢感興趣的資源,許多Web 應(yīng)用程序會(huì)提供搜索功能。瀏覽器將用戶輸入的關(guān)鍵詞提交給服務(wù)器,然后服務(wù)器處理該請(qǐng)求并將查詢結(jié)果返回給用戶。如果開發(fā)者在實(shí)現(xiàn)該功能的時(shí)候,對(duì)用戶輸入的合法性沒有進(jìn)行充分的驗(yàn)證,可能會(huì)帶來安全隱患。如果用戶輸入的數(shù)據(jù)中含有某些特殊字符,使得服務(wù)器程序無法正常執(zhí)行,就會(huì)產(chǎn)生錯(cuò)誤響應(yīng),并將異常代碼拋到前端瀏覽器中或者直接在前端顯示服務(wù)器錯(cuò)誤等信息。

        例如,圖1(a)是某市疾控中心的主頁,當(dāng)搜索關(guān)鍵詞“占比%1”時(shí),服務(wù)器不會(huì)返回正常的搜索結(jié)果,而是返回一個(gè)只包含錯(cuò)誤信息的頁面,如圖1(b)所示,顯示服務(wù)器遇到內(nèi)部錯(cuò)誤,服務(wù)端的java 程序遇到了“java.lang.NullPointerException”的異常,無法完成此請(qǐng)求。Web應(yīng)用程序中存在很多這樣的錯(cuò)誤,圖2 是4 種不同的出錯(cuò)頁面,都是因?yàn)樗阉髂承┨厥庾址麑?dǎo)致的。這些應(yīng)用程序錯(cuò)誤會(huì)導(dǎo)致服務(wù)器無法返回正常的搜索結(jié)果,同時(shí)有些錯(cuò)誤頁面也會(huì)暴露敏感信息,如服務(wù)器物理路徑、堆棧調(diào)用信息、數(shù)據(jù)庫信息等。

        此類故障的存在不但會(huì)影響用戶體驗(yàn),而且極有可能成為安全問題。比如,攻擊者在尋找SQL(structured query language)注入點(diǎn)時(shí),通常會(huì)輸入某些特殊字符,如果服務(wù)器返回錯(cuò)誤,很可能可以進(jìn)行SQL 注入,因?yàn)檫@表明Web 應(yīng)用程序中對(duì)用戶提交的數(shù)據(jù)未進(jìn)行合理的驗(yàn)證或過濾[2-3]。同時(shí),錯(cuò)誤頁面暴露的敏感信息會(huì)為攻擊者提供極大的便利[4]。因此,對(duì)搜索功能的充分測試是非常有必要的。

        對(duì)于Web 應(yīng)用程序的搜索功能,覆蓋全空間測試用例的完全測試幾乎是不可能完成的任務(wù),因?yàn)樗阉骺臻g巨大,無法在有限時(shí)間內(nèi)完全覆蓋。而只考慮搜索那些常見內(nèi)容的測試場景是很難滿足測試要求的,因?yàn)樵趯?shí)際操作中,用戶很可能不小心輸錯(cuò)內(nèi)容,也有很多惡意用戶會(huì)嘗試搜索一些危險(xiǎn)且不常用的字符。因此,測試用例要充分考慮各種常用和不常用字符及它們的組合??梢詫⒔M合測試的方法應(yīng)用到Web程序搜索功能上。

        Fig.1 Search function display圖1 搜索功能展示

        Fig.2 Web page error message圖2 網(wǎng)頁錯(cuò)誤信息

        在系統(tǒng)測試中,檢查系統(tǒng)參數(shù)的所有取值組合來進(jìn)行充分的測試需要花費(fèi)很高的代價(jià),因?yàn)殡S著參數(shù)數(shù)量的增加,測試用例的數(shù)量呈指數(shù)增長。組合測試[5]是一種有效的黑盒測試方法,其充分考慮到系統(tǒng)中各參數(shù)之間的交互作用,進(jìn)而生成高質(zhì)量的測試用例。很多應(yīng)用程序錯(cuò)誤是由少數(shù)幾個(gè)參數(shù)的相互作用導(dǎo)致的[5],例如Kuhn 和Reilly[6]分析了Mozilla瀏覽器的錯(cuò)誤報(bào)告記錄,發(fā)現(xiàn)超過70%的錯(cuò)誤是由某兩個(gè)參數(shù)的相互作用觸發(fā)的,超過90%的錯(cuò)誤是由3個(gè)以內(nèi)的參數(shù)互相作用觸發(fā)的。組合測試(CT)[5]的方法就是選擇部分測試用例,可以覆蓋任意t(t是一個(gè)正整數(shù),且t≥2)個(gè)參數(shù)可能取值的全部組合。

        如果執(zhí)行完測試用例后,有部分測試用例會(huì)引起服務(wù)器錯(cuò)誤響應(yīng),可以使用組合測試錯(cuò)誤定位的方法來找到這些字符組合。傳統(tǒng)的錯(cuò)誤定位是想找到錯(cuò)誤的根本原因以及錯(cuò)誤在源碼中的位置,而本文這里的定位是想找到程序輸入中哪些參數(shù)及其取值組合會(huì)引起系統(tǒng)錯(cuò)誤,本文提到的錯(cuò)誤定位和錯(cuò)誤組合定位都指后者。本文在已有的研究基礎(chǔ)上,結(jié)合搜索功能測試的特點(diǎn),提出一種組合測試錯(cuò)誤定位方法,可以有效地找到會(huì)引起錯(cuò)誤組合。

        對(duì)搜索功能的充分測試可以暴露出服務(wù)端程序在處理特殊字符組合時(shí)潛在的問題。而錯(cuò)誤定位可以幫助開發(fā)者修復(fù)這些故障,提升網(wǎng)站的形象,提高用戶體驗(yàn),避免惡意用戶的攻擊。因此,對(duì)搜索功能的充分測試是非常有意義的。

        總的來說,這篇文章主要有以下三點(diǎn)貢獻(xiàn):

        (1)在Raunak 等人[7]的基礎(chǔ)上,實(shí)現(xiàn)了一個(gè)使用組合測試方法測試Web應(yīng)用程序的搜索功能原型工具,并提出一種組合測試錯(cuò)誤定位方法,可以有效地找到會(huì)引起服務(wù)器錯(cuò)誤響應(yīng)的字符組合。

        (2)測試了96 個(gè)學(xué)校、政府和事業(yè)單位類網(wǎng)站,發(fā)現(xiàn)其中23 個(gè)網(wǎng)站的搜索功能存在問題,當(dāng)用戶搜索某些特殊字符組合時(shí),會(huì)引起服務(wù)器的錯(cuò)誤響應(yīng)。

        (3)對(duì)存在問題的網(wǎng)站的錯(cuò)誤定位結(jié)果進(jìn)行分析,發(fā)現(xiàn)56%的服務(wù)器錯(cuò)誤響應(yīng)是由“%”“<”“’”“”和其他字符的組合引起的。

        本文的組織結(jié)構(gòu)如下:第2章介紹組合測試的背景知識(shí);第3 章介紹本文提出的方法;第4 章介紹實(shí)驗(yàn)結(jié)果和評(píng)估;第5 章介紹相關(guān)的研究工作;第6 章是本文的總結(jié)與展望。

        2 背景介紹

        關(guān)于組合測試和錯(cuò)誤定位,相關(guān)定義[8]如下:

        定義1(SUT(software under testing)模型)一個(gè)SUT(k,s)模型有k個(gè)參數(shù)p1,p2,…,pk。s是一個(gè)長度為k的向量,可表示為,其中sj表示參數(shù)pi可能取值的個(gè)數(shù),pi的定義域?yàn)镈i={di1,di2,…,disj}。

        定義2(測試用例)一個(gè)測試用例t是一個(gè)長度為k的向量,可表示為,其中v1∈D1,v2∈D2,…,vk∈Dk,表示為SUT 中每個(gè)參數(shù)賦予一個(gè)確定的值,p1=v1,p2=v2,…,pk=vk。

        定義3(測試用例集)一個(gè)測試用例集T是一組測試用例集合{t1,t2,…,tm}。

        定義4(combinatorial interaction,CI)一個(gè)交互組合CI是一個(gè)長度為k的向量,其中t個(gè)參數(shù)賦予特定的值,剩下的k-t個(gè)參數(shù)未確定(未確定的值用-表示)。這里t表示CI 的大小。例如,長度為k的向量可表示一個(gè)大小為1 的CI,其中v1∈D1,它表示參數(shù)p1=v1,剩下的k-1個(gè)參數(shù)未確定。

        定義5(CI 包含關(guān)系)一個(gè)CIP1被另一CIP2包含(contain),當(dāng)且僅當(dāng)P1的所有賦值的參數(shù)在P2中也被賦值,并且這些參數(shù)在P1和P2中被賦予了相同的值。一個(gè)CIP被測試用例T包含,當(dāng)且僅當(dāng)P中的所有賦值的參數(shù)具有與T中相同的值。

        定義6(faulty combinatorial interaction,F(xiàn)CI)一個(gè)錯(cuò)誤交互組合FCI是一種特殊的CI,所有包含它的測試用例都會(huì)失敗。

        如果Pi是FCI,其他任何包含Pi的CI也是FCI。比如P1是一個(gè)FCI,且P2包含P1,所有包含P2的測試用例也都將包含P1,因此這些測試用例都會(huì)失敗,即P2也是FCI。組合測試的錯(cuò)誤定位是想找到那些最小FCI(minimal FCI),最小FCI不包含任何比它小的FCI。

        組合測試的錯(cuò)誤定位主要可以分為兩種,非自適應(yīng)方法和自適應(yīng)方法。非自適應(yīng)的方法是指所有的測試用例可以并行執(zhí)行,不依賴于先前測試用例的執(zhí)行結(jié)果。Colbourn和McClary[9]提出了一種錯(cuò)誤定位方法,他們通過構(gòu)造Locating Array 的方法來找到系統(tǒng)中的最小出錯(cuò)組合。Zhang等[8]提出了一種基于約束求解和優(yōu)化技術(shù)的方法,無需生成額外的測試用例就可以找到最小出錯(cuò)組合。自適應(yīng)的方法是指部分測試用例的選擇是基于先前測試用例的執(zhí)行結(jié)果。Zeller和Hildebrandt[10]提出了一種典型的自適應(yīng)方法。這種方法的主要思想是通過修改輸入?yún)?shù)來找到最小出錯(cuò)組合。對(duì)于失敗的測試用例,修改其中部分參數(shù)的值;如果修改后的測試用例仍然是失敗的,則修改的參數(shù)與系統(tǒng)錯(cuò)誤無關(guān);否則,修改的參數(shù)與系統(tǒng)錯(cuò)誤有關(guān)。

        3 研究方法

        圖3 是整體方法的流程圖。主要分成測試用例生成、測試用例執(zhí)行和錯(cuò)誤組合定位三部分。下面詳細(xì)介紹各部分內(nèi)容。

        Fig.3 Workflow of method in this paper圖3 方法流程圖

        3.1 測試用例生成

        本文使用組合測試的方法來生成測試用例。組合測試是一種有效的測試方法,可以應(yīng)用于網(wǎng)站搜索功能的測試??梢愿鶕?jù)組合覆蓋率生成測試用例,測試強(qiáng)度為t(t為正整數(shù),且t≥2)的組合測試可以保證任何參數(shù)值的t組合至少被一個(gè)測試用例覆蓋。組合測試用例的構(gòu)造方法,多數(shù)是基于覆蓋數(shù)組的。組合測試設(shè)計(jì)過程可簡要描述如下:

        (1)建立輸入模型(input model),模型包括有哪些參數(shù)以及每個(gè)參數(shù)的可能取值。

        (2)根據(jù)輸入模型,生成覆蓋數(shù)組。

        (3)將生成的覆蓋數(shù)組轉(zhuǎn)化為測試用例,覆蓋數(shù)組的每一行表示一個(gè)測試用例。

        步驟(1)的輸入模型將在下面詳細(xì)介紹。步驟(2)使用組合測試用例生成工具ACTS[11](advanced combinatorial testing system)來生成覆蓋數(shù)組。ACTS由NIST(National Institute of Standards and Technology)和UTA(University of Texas at Arlington)聯(lián)合開發(fā),實(shí)驗(yàn)表明,與類似工具相比,在覆蓋度t相同的情況下,ACTS生成的測試集較小,并且比其他類似工具更快,比如AETG(http://aetgweb.argreenhouse.com/)。步驟(3)將覆蓋數(shù)組轉(zhuǎn)化為測試用例并執(zhí)行,覆蓋數(shù)組中每一行是一個(gè)測試用例,每一個(gè)測試用例是一個(gè)由特殊字符組成的字符串。最后,通過組合測試錯(cuò)誤定位的方法來找到是哪些特殊字符的組合引起的服務(wù)器錯(cuò)誤響應(yīng)。各部分方法的詳細(xì)介紹如下。

        從用戶提交輸入到得到返回頁面服務(wù)端程序?qū)τ脩糨斎肟赡艿奶幚聿僮饔校?/p>

        (1)數(shù)據(jù)的編碼和解碼操作,如果用戶的輸入不滿足特定的參數(shù)格式,可能會(huì)引起錯(cuò)誤(如URL(uniform resoure locator)解碼,可以考慮%與其他字符的組合)。

        (2)過濾轉(zhuǎn)義操作:考慮到XSS(cascading style sheets)、SQL 注入等安全問題,很多網(wǎng)站會(huì)對(duì)用戶輸入進(jìn)行過濾和轉(zhuǎn)義,因此需要在輸入模型中加入部分XSS、SQL元素。

        (3)查詢操作:服務(wù)端程序可能會(huì)將用戶的輸入拼接成數(shù)據(jù)庫查詢語句,當(dāng)存在某些特殊字符時(shí),可能會(huì)改變查詢語句的語義從而引起錯(cuò)誤。

        可以構(gòu)造輸入模型如表1 所示,共有7 個(gè)參數(shù)。參數(shù)的選擇和取值并不是唯一的,開發(fā)者可以根據(jù)實(shí)際的需求來構(gòu)造模型。這里借鑒Bozic等[12-13]構(gòu)造XSS攻擊向量的方法,取7個(gè)參數(shù),各參數(shù)分別表示為:

        參數(shù)1模擬輸入標(biāo)簽的結(jié)束符號(hào)。比如SQL查詢中,待比較的字符串應(yīng)該填充在兩個(gè)單引號(hào)之間,參數(shù)1 選擇單引號(hào)可以模擬SQL 語句中單引號(hào)作用區(qū)間的結(jié)束,使后面的字符組合可以當(dāng)作代碼被執(zhí)行。

        參數(shù)2表示打開一個(gè)作用區(qū)間,比如“{”等,可以與后面的關(guān)閉標(biāo)記“}”組成一個(gè)作用區(qū)間。

        參數(shù)3、4、5表示在參數(shù)2 和參數(shù)6 構(gòu)成的作用區(qū)間中特殊字符組合,比如英文字母“aBcD”、數(shù)字“22”、標(biāo)點(diǎn)符號(hào)“?”、運(yùn)算符號(hào)“+”、其他特殊字符“&”等。

        參數(shù)6關(guān)閉由參數(shù)2打開的作用區(qū)間,比如“}”,可以與前面的打開標(biāo)記“{”組成一個(gè)作用區(qū)間。

        參數(shù)7表示在輸入末尾有特殊作用的關(guān)鍵詞,比如在SQL語句中有注釋作用的“#”。

        該模型可表示為一個(gè)SUT(7,<7,9,9,8,6,6,5>)。從每個(gè)參數(shù)的取值范圍中選擇一個(gè)值組成一個(gè)用于搜索的字符串,每個(gè)參數(shù)分別有7、9、9、8、6、6、5個(gè)可能取值,這樣一共有816 480 種不同的字符串,而使用ACTS 構(gòu)造的覆蓋強(qiáng)度為2 的測試集只需要81 個(gè)測試用例。

        Table 1 Input model表1 輸入模型

        在這個(gè)輸入模型中,space代表空格,NULL表示不取一個(gè)空字符。其中,數(shù)字和字母組合有aBcD、script、11 等;特殊字符有(、)、[、]、{、}、<、>、”、’、、%、!、?、~、/、|、&、-、、,、.、^、+、=、*、#,包括運(yùn)算符號(hào)、標(biāo)點(diǎn)符號(hào)等。

        3.2 測試用例執(zhí)行

        通過組合測試工具生成測試用例,每一個(gè)測試用例是一個(gè)由特殊字符組成的字符串。對(duì)于每一個(gè)測試用例,通過構(gòu)造URL來模擬查詢字符串,如果返回正常的頁面,則認(rèn)為此測試用例的執(zhí)行結(jié)果為通過,如果服務(wù)端直接將異常代碼拋到前端瀏覽器,或者在前端瀏覽器顯示服務(wù)器錯(cuò)誤,就認(rèn)為此測試用例的執(zhí)行結(jié)果為失敗。

        在實(shí)際測試中,可能遇到以下兩種情況。(1)IP限制,即如果檢測到同一IP 在短時(shí)間內(nèi)發(fā)送大量請(qǐng)求,則限制該IP的訪問;(2)存在部分無效測試用例,可能的原因之一是Web 應(yīng)用程序內(nèi)部的防御機(jī)制。如果用戶的輸入滿足防御機(jī)制內(nèi)置的安全規(guī)則,則重置鏈接或拒絕執(zhí)行此請(qǐng)求[14]。

        對(duì)于第一種情況,采用停止等待或者更換IP 的方法,同時(shí)這也要求本文的測試用例規(guī)模不能太大。

        第二種情況中,部分測試用例可以得到執(zhí)行結(jié)果,而部分測試用例無法得到執(zhí)行結(jié)果,是無效的。無效測試用例中所包含的字符組合會(huì)因?yàn)闇y試用例無效而無法被覆蓋到,這種行為在組合測試中稱為masking effect[15]。造成部分測試用例無效的原因是由于包含了部分字符及其組合,可以生成額外的測試用例來解決這個(gè)問題。

        發(fā)現(xiàn)一個(gè)測試用例t=是無效的,使用Simplified-One-Factor-One-Time[16]的方法對(duì)測試用例進(jìn)行變異,構(gòu)造k個(gè)額外的測試用例,,其中*表示一個(gè)隨機(jī)的并且和原測試用例不相同的值。這樣因?yàn)樵瓬y試用例無效而無法被覆蓋到的組合可以重新被覆蓋到。

        比如,對(duì)于一個(gè)目標(biāo)網(wǎng)站,有測試用例“’{script|^>#”,在執(zhí)行該測試用例時(shí),因?yàn)椤啊钡某霈F(xiàn)該字符串滿足此網(wǎng)站的安全規(guī)則,服務(wù)器拒絕執(zhí)行該請(qǐng)求,則該測試用例無效。此時(shí),無法確定其他字符及組合是否會(huì)引起服務(wù)器內(nèi)部錯(cuò)誤,實(shí)際上,“{script”是會(huì)引起服務(wù)器錯(cuò)誤的。此時(shí),可以使用一階變異的方法額外生成7個(gè)測試用例,“{script|^>#”“’script|^>#”“’{|^>#”“’{script^>#”“’{script|>#”“’{script|^#”“’{script|^>”。執(zhí)行這7個(gè)測試用例,其中“{script|^>#”這個(gè)字符串會(huì)引起服務(wù)器內(nèi)部錯(cuò)誤。這樣,就不會(huì)因?yàn)樵摐y試用例無效而使錯(cuò)誤組合“{script”無法被發(fā)現(xiàn)。

        3.3 錯(cuò)誤組合定位

        對(duì)于存在錯(cuò)誤的Web 應(yīng)用,通過組合測試錯(cuò)誤定位的方法來找到是哪些特殊字符的組合引起的服務(wù)器錯(cuò)誤響應(yīng)。使用組合測試生成字符串進(jìn)行測試時(shí)不需要全部參數(shù),只使用部分參數(shù),也能構(gòu)造一個(gè)測試用例,可以將這個(gè)特點(diǎn)應(yīng)用到錯(cuò)誤定位中。

        Raunak 等[7]使用了Colbourn 和McClary[9]提出的一種非自適應(yīng)的組合測試錯(cuò)誤定位方法。在該方法的基礎(chǔ)上,提出一種新的錯(cuò)誤定位方法。該方法的算法過程如算法1所示。

        算法的第一步是得到一組可疑的CI集合。算法的輸入是一組測試用例的執(zhí)行結(jié)果,F(xiàn)ail_T表示失敗測試用例集,Pass_T表示通過測試用例集,輸出是FCI集合(出錯(cuò)組合)。算法的第一行將Minimal_FCI設(shè)置為空集,它將用來保存找到的FCI。算法的第2行,是找出可疑CI集合。如果一個(gè)CI出現(xiàn)在失敗測試用例中,它可能是一個(gè)FCI,如果一個(gè)CI出現(xiàn)在通過的測試用例中,它一定不是FCI。這樣,那些出現(xiàn)在失敗測試用例中,但沒出現(xiàn)在通過測試用例集中的CI就是可疑CI。用Fail_T包含的全部CI減去Pass_T中包含的全部CI,則會(huì)刪除一定不可能是FCI的CI,但剩下的CI不一定就是FCI,Susp_CI_Set表示這些可疑的CI集合。

        算法的第二步是從可疑CI集合中得到最小出錯(cuò)組合(minimal FCI)。本文和Raunak 等[7]的方法有所不同。Raunak 的方法假設(shè)Pi,Pj∈Susp_CI_Set,且Pi包含Pj。Pi和Pj都能引起錯(cuò)誤,但Pi不是最小出錯(cuò)組合(minimal FCI),需要將Pi刪除。因此Raunak將Susp_CI_Set包含其他CI的CI刪除,得到的就是最終結(jié)果。這種方法的有效性不高,因?yàn)闀?huì)存在部分CI雖然只出現(xiàn)在了失敗測試用例中,但并不能導(dǎo)致服務(wù)器錯(cuò)誤,不能將其當(dāng)作FCI,因此也就不能將包含此CI的其他CI直接刪除。

        為提高定位的有效性,本文從算法的第3行到第11行,確認(rèn)Susp_CI_Set中可疑的CI是否為FCI。因?yàn)橄M页鲎钚〕鲥e(cuò)組合,所以從大小為1 的CI開始確認(rèn),如果這個(gè)CI構(gòu)成的測試用例執(zhí)行結(jié)果為失敗,它就是FCI,將其加入到Minimal_FCI,如算法的第7行所示。因?yàn)榘薈I的其他CI也是FCI,但不是最小出錯(cuò)組合,在算法的第8 行,將Susp_CI_Set中包含此FCI的其他CI刪除。確認(rèn)完大小為k的FCI后,返回Minimal_FCI。此時(shí),Minimal_FCI就是錯(cuò)誤定位到的最終結(jié)果。

        算法1組合測試錯(cuò)誤定位

        輸入:失敗測試用例集Fail_T,通過測試用例集Pass_T。

        輸出:FCI集合。

        4 實(shí)驗(yàn)結(jié)果與分析

        在python 3.5.4 環(huán)境下實(shí)現(xiàn)了一個(gè)原型工具,可以實(shí)現(xiàn)本文提到的全部方法。使用該工具測試實(shí)際中的Web應(yīng)用程序。

        360 發(fā)表的《2017 中國網(wǎng)站安全形勢(shì)分析報(bào)告》(http://zt.#/1101061855.php?dtid=1101062368&did=490995546)顯示,教育培訓(xùn)、政府機(jī)構(gòu)和事業(yè)單位這3個(gè)行業(yè)的網(wǎng)站是檢測出網(wǎng)站漏洞最多的行業(yè)。搜索功能的測試和網(wǎng)站的安全關(guān)系密切,而且政府、學(xué)校等網(wǎng)站是面向大眾的,具有特定權(quán)威、嚴(yán)肅等屬性,這些網(wǎng)站出現(xiàn)故障將極大影響公共安全和其公信力。從安徽、北京、陜西等地的學(xué)校,政府機(jī)構(gòu)和事業(yè)單位網(wǎng)站中收集了96 個(gè)提供搜索功能的網(wǎng)站,其中有:48個(gè)學(xué)校類網(wǎng)站,包括12個(gè)研究生院網(wǎng)站,3個(gè)大學(xué)網(wǎng)站和5個(gè)中學(xué)網(wǎng)站;40個(gè)政府機(jī)構(gòu)網(wǎng)站,包括13個(gè)省政府網(wǎng)站和27個(gè)市政府網(wǎng)站;8個(gè)事業(yè)單位類網(wǎng)站。在這96個(gè)網(wǎng)站中,有76個(gè)使用get方法發(fā)送http請(qǐng)求,有20個(gè)網(wǎng)站使用post方法發(fā)送http請(qǐng)求。

        4.1 實(shí)驗(yàn)結(jié)果

        使用組合測試的方法測試了這96 個(gè)網(wǎng)站,實(shí)驗(yàn)結(jié)果發(fā)現(xiàn),96 個(gè)網(wǎng)站中共有23 個(gè)網(wǎng)站的搜索功能存在問題,實(shí)驗(yàn)結(jié)果如表2所示。其中在8個(gè)事業(yè)單位類的網(wǎng)站中,有3 個(gè)網(wǎng)站存在錯(cuò)誤,占比最高為37.5%;48 個(gè)學(xué)校類的網(wǎng)站中存在錯(cuò)誤的網(wǎng)站有15個(gè),占為31.25%,有50%的研究生院網(wǎng)站存在錯(cuò)誤,相比于大學(xué)和中學(xué)網(wǎng)站,研究生院的網(wǎng)站更容易檢測到錯(cuò)誤;40 個(gè)政府機(jī)構(gòu)網(wǎng)站中存在錯(cuò)誤網(wǎng)站有5個(gè),占比最小,為12.5%,市政府網(wǎng)站比省政府網(wǎng)站更容易檢測出錯(cuò)誤。

        在這96 個(gè)網(wǎng)站中,使用get 方法的76 個(gè)網(wǎng)站中,有14個(gè)網(wǎng)站存在錯(cuò)誤,占比為18.4%。使用post方法的20個(gè)網(wǎng)站中,有9個(gè)網(wǎng)站存在錯(cuò)誤,占比為45.0%。在本次實(shí)驗(yàn)中,使用post方法發(fā)送http請(qǐng)求的網(wǎng)站更容易檢測出錯(cuò)誤。

        Table 2 Results of Website testing表2 網(wǎng)站測試結(jié)果

        對(duì)搜索功能存在錯(cuò)誤的22個(gè)網(wǎng)站進(jìn)行錯(cuò)誤定位(剩下的一個(gè)網(wǎng)站,雖然檢測到了錯(cuò)誤,但因?yàn)樗鼘?duì)ip的限制嚴(yán)格而無法錯(cuò)誤定位),來確定是哪些字符組合引起的服務(wù)器錯(cuò)誤。共發(fā)現(xiàn)112 種不同的FCI,對(duì)應(yīng)著112 種不同的會(huì)引起網(wǎng)站服務(wù)器錯(cuò)誤的字符組合。這112種FCI的大小的分布圖如圖4,可見大小為2的FCI共有65種,占比最大,93.75%的FCI值小于3。

        Fig.4 FCI size distribution圖4 FCI大小分布圖

        根據(jù)這些會(huì)引起服務(wù)器錯(cuò)誤的字符組合的頻數(shù)進(jìn)行了統(tǒng)計(jì),統(tǒng)計(jì)結(jié)果如表3所示。頻數(shù)最多字符組合共出現(xiàn)了11次,是“%!”“%?”“%/”“%~”,并且56%的服務(wù)器錯(cuò)誤都是由“%”“<”“’”“”和其他字符的組合引起的。根據(jù)部分網(wǎng)站的應(yīng)用程序錯(cuò)誤信息,分析這些字符組合引起服務(wù)器錯(cuò)誤的可能原因如下:

        “%”:“%”通常會(huì)用來做URL 編碼,Web 程序?qū)⒂脩籼峤坏妮斎胫苯油ㄟ^get或post方法提交到服務(wù)器,服務(wù)器程序會(huì)先對(duì)輸入做URL 解碼,此時(shí)包含“%”并且不符合URL編碼規(guī)則的輸入就會(huì)引起程序崩潰,造成服務(wù)器錯(cuò)誤響應(yīng)。

        Table 3 Result of fault location表3 錯(cuò)誤定位結(jié)果

        “<”:“<”是一個(gè)常見的html標(biāo)簽,和XSS注入關(guān)系密切。在asp.net 程序中,如果檢測到用戶提交的輸入中含有“

        “’”:SQL 查詢中,待比較的字符串應(yīng)該填充在兩個(gè)單引號(hào)之間,如果用戶提交的輸入中含有“’”,且服務(wù)端程序直接將用戶輸入拼接成SQL語句進(jìn)行查詢,就會(huì)導(dǎo)致SQL查詢的異常,從而造成服務(wù)器的錯(cuò)誤響應(yīng)。一般來說,如果含有“’”的字符組合可以引起服務(wù)器的錯(cuò)誤響應(yīng),則該網(wǎng)站有很大的可能存在SQL注入的漏洞[2-3]。

        “”:在正則表達(dá)式中以及SQL 語句中表示轉(zhuǎn)義字符,表示下一個(gè)字符為特殊字符。服務(wù)端程序在處理含有“”的輸入(比如java 程序中的replaceAll()方法)或者進(jìn)行SQL查詢時(shí),沒有考慮到“”的特殊含義,可能會(huì)引起服務(wù)器的錯(cuò)誤響應(yīng)。

        4.2 錯(cuò)誤網(wǎng)站案例

        同時(shí),也將本文的測試方法應(yīng)用到部分商業(yè)網(wǎng)站的測試中。在一個(gè)招聘網(wǎng)站的測試中檢測到了問題,下面詳細(xì)介紹本文的測試過程。分別執(zhí)行覆蓋強(qiáng)度為2、3、4的測試用例,執(zhí)行結(jié)果如表4所示。使用錯(cuò)誤定位的方法來找到引起系統(tǒng)錯(cuò)誤的字符組合,定位結(jié)果如表5所示。

        Table 4 Results of test case execution表4 測試用例執(zhí)行結(jié)果

        Table 5 Results of fault location of recruitment Website表5 招聘網(wǎng)站的錯(cuò)誤定位結(jié)果

        可以發(fā)現(xiàn),覆蓋強(qiáng)度2、3、4生成的測試用例中失敗測試用例的比例基本相似,覆蓋強(qiáng)度3、4的錯(cuò)誤定位結(jié)果是相同的,這些錯(cuò)誤組合主要是由%和其他字符的組合引起的??赡艿囊粋€(gè)原因是包含特殊字符組合(比如“%!”“%?”)的輸入會(huì)因?yàn)椴环蟄RL解碼函數(shù)的輸入而引起了“Internal Server Error”的響應(yīng)。

        4.3 測試用例變異方法評(píng)估

        在實(shí)際情況中,部分Web 應(yīng)用程序在測試時(shí)存在masking effect 情況。此時(shí),采用Simplified-One-Factor-One-Time的測試用例變異的方法生成額外的測試用例來解決這個(gè)問題。在96 個(gè)測試網(wǎng)站中,檢測到有26 個(gè)網(wǎng)站存在這樣的情況,其中有3 個(gè)網(wǎng)站存在錯(cuò)誤。無效測試用例的存在使得某些錯(cuò)誤組合無法被覆蓋到。比較3 個(gè)存在無效測試用例且搜索功能存在錯(cuò)誤的網(wǎng)站的錯(cuò)誤定位結(jié)果,發(fā)現(xiàn)有兩個(gè)網(wǎng)站在執(zhí)行完變異測試用例后定位到的錯(cuò)誤組合數(shù)比不執(zhí)行變異測試用例定位到的錯(cuò)誤組合數(shù)多1。由此可見,使用測試用例變異的方法可以使錯(cuò)誤定位得到的結(jié)果更全面。

        4.4 錯(cuò)誤定位方法評(píng)估

        Raunak 等[7]使用Colbourn 和McClary[9]提出的組合測試錯(cuò)誤定位方法,將這種方法記作Method_A。本文的方法記作Method_B。主要考慮兩方面:(1)錯(cuò)誤定位方法是否可以找到所有的錯(cuò)誤組合;(2)錯(cuò)誤定位方法找到的結(jié)果是否準(zhǔn)確。從“查全率”和“查準(zhǔn)率”兩方面來分析兩種組合測試錯(cuò)誤定位方法在Web應(yīng)用程序搜索功能測試上的有效性。在15個(gè)存在錯(cuò)誤的學(xué)校類網(wǎng)站中,有6個(gè)網(wǎng)站存在IP限制和無效測試用例,以剩下的9個(gè)學(xué)校類網(wǎng)站為測試對(duì)象。

        “查全率”是指錯(cuò)誤定位方法能不能找到所有的錯(cuò)誤組合。可以將定位到的FCI 轉(zhuǎn)換為約束加入到輸入模型中,重新生成測試用例,使得生成的測試用例不包含任何定位到的FCI。例如,有SUT,它的3 個(gè)參數(shù)為p1{0,1}、p2{0,1}、p3{0,1},定位得到的FCI為此時(shí)可以生成約束(約束定義方式使用ACTS[10]工具的定義標(biāo)準(zhǔn))如下:

        [Constraint]

        !(p1=0&&p2=1)

        !(p1=0&&p3=1)

        !(p2=0&&p3=0)

        兩種錯(cuò)誤定位方法的“查全率”執(zhí)行結(jié)果如表6所示??梢钥吹剑? 個(gè)被測Web 應(yīng)用中,有8 個(gè)Web應(yīng)用在將Method_A定位得到的FCI以約束的形式加入到模型后生成的測試用例的執(zhí)行結(jié)果為全部通過,7 個(gè)Web 應(yīng)用在將Method_B 定位得到的FCI以約束的形式加入到模型后生成的測試用例的執(zhí)行結(jié)果為全部通過。將覆蓋強(qiáng)度增加到4時(shí),其余兩個(gè)Web 應(yīng)用的執(zhí)行結(jié)果也全部為正確。這說明兩種定位方法可以全面地找到被測系統(tǒng)中的錯(cuò)誤組合。

        “查準(zhǔn)率”是指定位得到的字符組合中確定會(huì)引起服務(wù)器錯(cuò)誤的字符組合所占的比例。每次從定位結(jié)果中取出一個(gè)FCI,在輸入模型中加入約束,使得重新生成測試用例全都包含此FCI而不包含任何其他的FCI。例如,有,它的3個(gè)參數(shù)為p1{0,1}、p2{0,1}、p3{0,1},定位得到的FCI 為對(duì)于可以生成約束如下:

        [Constraint]

        (p1=0&&p2=1)

        !(p1=0&&p3=1)

        !(p2=0&&p3=0)

        [Constraint]

        (p1=0&&p3=1)

        !(p1=0&&p2=1)

        !(p2=0&&p3=0)

        對(duì)于選中的FCI,使用這種方法重新生成的所有測試用例都將包含此FCI 且不包含任何定位到的其他FCI。如果所有的測試用例執(zhí)行結(jié)果都引起服務(wù)器的錯(cuò)誤響應(yīng),就認(rèn)為此FCI為有效的FCI,否則是無效的。將定位得到的所有FCI 中有效的FCI 所占的比例記作“查準(zhǔn)率”。

        兩種錯(cuò)誤定位方法的“查準(zhǔn)率”執(zhí)行結(jié)果如表7所示。使用Method_A 定位得到的錯(cuò)誤組合的數(shù)量比較多,但平均只有7.4%的錯(cuò)誤組合是有效的。使用Method_B 定位得到的錯(cuò)誤組合中,平均有77.2%的錯(cuò)誤組合是有效的,而且有5個(gè)網(wǎng)站的定位結(jié)果是100%有效的。這說明相比于Method_A,Method_B能夠更為準(zhǔn)確地找到被測網(wǎng)站中的錯(cuò)誤組合。

        Table 6 “recall”of fault location method表6 錯(cuò)誤定位方法“查全率”

        Table 7 “precision”of fault location method表7 錯(cuò)誤定位方法“查準(zhǔn)率”

        同時(shí)注意到,有一些網(wǎng)站,它們執(zhí)行相同覆蓋強(qiáng)度生成的測試用例的結(jié)果相同,比如csu和cupl,uibe和buct,雖然它們的前端顯示頁面不同,但后端處理程序很可能是相同的。

        實(shí)驗(yàn)結(jié)果表明,本文的方法實(shí)現(xiàn)的工具可以有效地測試Web 應(yīng)用程序的搜索功能,本文的錯(cuò)誤定位方法可以準(zhǔn)確地找到出錯(cuò)字符組合。但測試的方法仍有不足,有些網(wǎng)站可能并不會(huì)讓錯(cuò)誤信息在前端瀏覽器上顯示,因此無法判斷本文的測試用例是否會(huì)引起服務(wù)器內(nèi)部錯(cuò)誤。開發(fā)者可以通過讀取系統(tǒng)日志來解決此問題。

        5 相關(guān)工作

        對(duì)于許多復(fù)雜的軟件系統(tǒng),通常有不同的組件、選項(xiàng)或參數(shù)相互作用。對(duì)于這樣的系統(tǒng),組合測試是一種非常有效的黑盒測試技術(shù),它可以應(yīng)用于不同的測試級(jí)別,如單元測試、集成測試和系統(tǒng)測試。最近,有不少研究者將這種測試方法應(yīng)用到Web測試和安全測試。

        使用組合測試來檢測Web應(yīng)用程序的搜索功能是否存在錯(cuò)誤,而Bozic 和Simos 等[12-13,17]則將組合測試以及組合測試錯(cuò)誤定位的方法應(yīng)用到XSS攻擊檢測上。Bozic使用不同組合強(qiáng)度生成的字符串測試用例對(duì)3個(gè)Web程序進(jìn)行測試,結(jié)果顯示組合測試的方法十分有效。在接下來的研究中,他們將約束條件加入到組合測試模型中,能顯著提高測試用例的質(zhì)量。Simos 等[17]在Bozic 的基礎(chǔ)上,繼續(xù)研究組合測試在XSS攻擊上的應(yīng)用。他們使用組合測試錯(cuò)誤定位的方法來識(shí)別XSS 誘導(dǎo)組合,XSS 誘導(dǎo)組合是輸入?yún)?shù)值的組合,任何包含此誘導(dǎo)組合的測試用例一定會(huì)在運(yùn)行時(shí)成功觸發(fā)XSS漏洞。XSS誘導(dǎo)組合的識(shí)別有助于更好地理解XSS 漏洞的根本原因,幫助安全人員設(shè)計(jì)有效的過濾函數(shù)來避免這些漏洞。

        Raunak 等[7]將組合測試的方法應(yīng)用到Web 應(yīng)用程序的搜索功能測試上。在國家漏洞庫(National Vulnerability Database,NVD)網(wǎng)站開發(fā)實(shí)現(xiàn)新功能后,開發(fā)人員發(fā)現(xiàn)某些特殊字符會(huì)導(dǎo)致“服務(wù)器錯(cuò)誤”響應(yīng)。然而,不清楚哪些特殊字符的特定組合觸發(fā)了這種響應(yīng),以及還存在多少這樣的問題。他們使用組合測試的方法生成測試用例,并用錯(cuò)誤定位的方法找到出錯(cuò)組合,最后發(fā)現(xiàn)了49個(gè)輸入會(huì)引起“服務(wù)器錯(cuò)誤”響應(yīng)。但是,使用該錯(cuò)誤定位方法找到的字符組合中有很多是無效的。本文的錯(cuò)誤定位方法將每個(gè)可疑組合轉(zhuǎn)化成測試用例執(zhí)行,這樣可以更有效地找到出錯(cuò)字符組合。

        Qi等[18]提出了一種帶約束的成對(duì)測試(覆蓋強(qiáng)度為2 的組合測試)算法,稱為PTC(pairwise testing with constraints),以充分測試網(wǎng)站的表單交互過程。PTC算法使用組合測試生成需要提交的表單數(shù)據(jù),并能夠通過增加約束的方式處理語義約束和非法值的問題。根據(jù)算法實(shí)現(xiàn)了一個(gè)原型工具ComjaxTest,它能夠系統(tǒng)地探索Web應(yīng)用程序的狀態(tài)空間。實(shí)驗(yàn)結(jié)果表明,采用PTC 算法配置的ComjaxTest 實(shí)現(xiàn)了動(dòng)態(tài)網(wǎng)頁的高覆蓋率,并在一定時(shí)間內(nèi)能檢測出更多的錯(cuò)誤。他們的測試用例是基于表單數(shù)據(jù)生成的,目的是達(dá)到高的網(wǎng)頁覆蓋率,而本文的測試用例是基于搜索的關(guān)鍵字生成的,目的是為了引起更多的服務(wù)器錯(cuò)誤響應(yīng)。

        Wang等[19]基于組合測試提出了一種新的用于檢測緩沖區(qū)溢出漏洞的黑盒測試方法。他們根據(jù)程序的外部參數(shù)生成測試用例,模擬攻擊者利用緩沖區(qū)溢出漏洞的過程來檢測漏洞。他們將這種方法應(yīng)用到5個(gè)開源程序上,可以有效地檢測這些程序中的緩沖區(qū)溢出漏洞。他們利用組合測試通常能達(dá)到高代碼覆蓋率的事實(shí),可以讓程序能夠到達(dá)攻擊點(diǎn),而本文使用組合測試是因?yàn)榻M合測試生成的測試用例可以覆蓋更多的字符組合。

        相比于組合測試,模糊測試在Web 程序安全測試方面有著更多的應(yīng)用。Tripp等[20]提出一種Web應(yīng)用程序安全測試工具XSS Analyzer。XSS Analyzer根據(jù)語法規(guī)則生成XSS 攻擊向量,并從未成功注入的攻擊向量中學(xué)習(xí)語法規(guī)則中的約束,即攻擊向量中不能包含哪些單詞,從而繞過Web 應(yīng)用程序的檢測。XSS Analyzer定位攻擊向量中的無效元素的方法與本文方法不同,XSS Analyzer首先將攻擊向量分解成一組單詞,并將每個(gè)單詞發(fā)送到目標(biāo)Web程序,確認(rèn)哪些單詞是無效的。這種做法的有效性不高,無法解決多個(gè)單詞組合出現(xiàn)時(shí)才會(huì)無效的情況,而且將每個(gè)單詞都發(fā)送到目標(biāo)Web程序會(huì)造成大量的http請(qǐng)求。

        Appelt等[14]將機(jī)器學(xué)習(xí)和進(jìn)化算法相結(jié)合,提出一種算法ML-Driven,可以繞過防火墻進(jìn)而注入SQL語句。該方法可以自動(dòng)生成測試用例并發(fā)送到防火墻,檢測它們是否可以成功繞過防火墻。根據(jù)測試用例的執(zhí)行結(jié)果,使用機(jī)器學(xué)習(xí)的算法來選擇最有可能繞過的測試用例進(jìn)行測試和變異。在實(shí)際測試中也會(huì)遇到防火墻的情況,但與ML-Driven 方法不同,本文的目的是為了能覆蓋到更多的字符組合,因此選擇生成額外的測試用例來解決這個(gè)問題。

        通過構(gòu)造URL并動(dòng)態(tài)執(zhí)行的方法來判斷該URL的執(zhí)行結(jié)果,同時(shí)也可以通過分析這些URL 的特征來做出判斷。Sheykhkanloo[21]則使用深度學(xué)習(xí)的方法來判斷。他們將SQL 標(biāo)簽加入到正常的URL 中,使之成為一個(gè)惡意的SQL 注入的URL,并根據(jù)這些正常的URL 和惡意的URL 訓(xùn)練深度學(xué)習(xí)模型,該模型可以有效地檢測URL 為正常的或惡意的,并可以識(shí)別URL的注入類型。Rathore等[22]則提出一種基于機(jī)器學(xué)習(xí)的檢測SNS(social networking services)XSS漏洞的方法。他們?cè)谶x擇特征時(shí)不只考慮到了URL的特點(diǎn),同時(shí)也考慮到了生成的網(wǎng)頁中html 元素以及SNS特征的影響。

        6 總結(jié)與展望

        將組合測試的方法應(yīng)用到Web應(yīng)用程序的搜索功能,并結(jié)合搜索功能測試的特點(diǎn),提出一種組合測試錯(cuò)誤定位方法來找到具體是哪些特殊字符的組合會(huì)引起系統(tǒng)錯(cuò)誤。實(shí)現(xiàn)了一個(gè)原型工具,并對(duì)學(xué)校、政府類和事業(yè)單位的96 個(gè)網(wǎng)站進(jìn)行了測試,其中23個(gè)網(wǎng)站在搜索某些特殊字符組合時(shí),會(huì)引起服務(wù)器錯(cuò)誤響應(yīng)。錯(cuò)誤定位的結(jié)果表明,56%的服務(wù)器錯(cuò)誤響應(yīng)是由“%”“<”“’”“”和其他字符的組合引起的。實(shí)驗(yàn)結(jié)果表明,本文的方法可以有效地測試Web 應(yīng)用程序的搜索功能,該錯(cuò)誤定位方法可以準(zhǔn)確地找到出錯(cuò)字符組合。

        未來工作中,主要考慮兩方面的工作:一是完成一個(gè)Web 應(yīng)用程序輸入?yún)?shù)的自動(dòng)化的測試工具,并將其應(yīng)用到更多的網(wǎng)站測試中;二是把組合測試應(yīng)用在Web應(yīng)用程序安全測試上。搜索功能存在錯(cuò)誤的網(wǎng)站有很大可能存在可注入代碼的漏洞。組合測試的方法可以生成高質(zhì)量的測試用例來測試這些Web應(yīng)用程序的安全問題。

        猜你喜歡
        測試用例字符應(yīng)用程序
        尋找更強(qiáng)的字符映射管理器
        基于SmartUnit的安全通信系統(tǒng)單元測試用例自動(dòng)生成
        字符代表幾
        一種USB接口字符液晶控制器設(shè)計(jì)
        電子制作(2019年19期)2019-11-23 08:41:50
        刪除Win10中自帶的應(yīng)用程序
        消失的殖民村莊和神秘字符
        基于混合遺傳算法的回歸測試用例集最小化研究
        基于依賴結(jié)構(gòu)的測試用例優(yōu)先級(jí)技術(shù)
        關(guān)閉應(yīng)用程序更新提醒
        電腦迷(2012年15期)2012-04-29 17:09:47
        軟件回歸測試用例選取方法研究
        天堂无码人妻精品av一区| 亚洲性av少妇中文字幕| 日韩精品在线一二三四区| 777米奇色狠狠俺去啦| 亚洲成a人v欧美综合天堂麻豆| 亚洲综合日韩中文字幕| 在线观看av不卡 一区二区三区| 久久久99精品成人片| 国产va免费精品高清在线| 久久精品国产亚洲一区二区| 亚洲综合新区一区二区| 边添小泬边狠狠躁视频| 免费观看黄网站在线播放| 国产精品一区2区三区| av国产免费在线播放| 亚洲av无码一区二区一二区| 亚洲中文字幕无码mv| 日本岛国精品中文字幕| 粉嫩人妻91精品视色在线看| 日本熟日本熟妇中文在线观看| 人妻人人澡人人添人人爽人人玩| 亚洲人成在线播放a偷伦| 大香蕉国产av一区二区三区| 香港三级日本三级a视频| 国产成人精品午夜福利在线| 国产精品毛片av一区二区三区| 日韩精品亚洲一区二区 | 无码三级在线看中文字幕完整版| 国产精品自线在线播放| 青青草中文字幕在线播放| 国产欧美日韩精品专区| 久久久精品3d动漫一区二区三区| 一区二区亚洲精美视频| 天天综合网网欲色| 国产成人亚洲日韩欧美| 亚洲日韩成人无码不卡网站| 91精品国自产拍老熟女露脸| 亚洲欧美综合区自拍另类| 国产乱色国产精品免费视频| 中文字幕日韩精品人妻久久久| 亚洲国产成人一区二区精品区|