亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種基于程序切片的軟件安全測(cè)試方法

文檔序號(hào):8258356閱讀:625來(lái)源:國(guó)知局
一種基于程序切片的軟件安全測(cè)試方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明給出了一種基于程序切片的軟件安全測(cè)試方法的設(shè)計(jì)方案,主要用于解決對(duì)于網(wǎng)頁(yè)中的JavaScript腳本語(yǔ)言代碼中可能存在的不可達(dá)路徑檢測(cè)的問(wèn)題,屬于軟件安全測(cè)試領(lǐng)域。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)技術(shù)的迅速發(fā)展,產(chǎn)生了許多web應(yīng)用服務(wù),桌面應(yīng)用程序也更多地變得web化,瀏覽器的功能也變得越來(lái)越多。瀏覽器除了瀏覽網(wǎng)頁(yè)之外,逐漸發(fā)揮著原本桌面程序的功能,成為人們?nèi)粘^k公、娛樂(lè)、交易、溝通的多功能服務(wù)平臺(tái)。web應(yīng)用的普及使得web技術(shù)的安全性必將成為一大課題。首當(dāng)其沖的就是web應(yīng)用軟件的安全性。
[0003]軟件是一系列按照特定順序組織的計(jì)算機(jī)數(shù)據(jù)和指令的集合,開(kāi)發(fā)人員編碼的安全意識(shí)和能力以及新的web技術(shù)的發(fā)展必然會(huì)導(dǎo)致開(kāi)發(fā)出來(lái)的web應(yīng)用或多或少存在一定的故障。軟件測(cè)試的根本目的就是要盡可能地消除軟件中的故障,使得軟件在投入使用前,其故障密度盡可能低或者達(dá)到可以接受的程度。隨著web應(yīng)用復(fù)雜性的提高,采用傳統(tǒng)的軟件測(cè)試技術(shù)發(fā)現(xiàn)和定位軟件中的錯(cuò)誤越來(lái)越難。
[0004]M.Weiser博士 1981年在國(guó)際軟件工程會(huì)議上報(bào)告了有關(guān)程序切片技術(shù)的研宄成果。在程序設(shè)計(jì)和分析過(guò)程中會(huì)遇到這樣的問(wèn)題:一個(gè)大的程序如果被分解成為一系列小模塊之后將會(huì)變得更加容易構(gòu)建、理解和維護(hù);在實(shí)際程序分析和調(diào)試過(guò)程中,分析人員有時(shí)只會(huì)對(duì)程序的一部分行為感興趣,程序切片就是從觀察這些行為開(kāi)始的;如果這個(gè)感興趣的行為可以表示為“在某些程序語(yǔ)句集中定義或使用某些變量的值”,那么這種規(guī)格說(shuō)明就稱之為一個(gè)切片準(zhǔn)則;利用數(shù)據(jù)流分析技術(shù)可以找到所有可能對(duì)此特定行為產(chǎn)生影響的程序代碼,這些代碼稱之為該程序的一個(gè)程序切片;根據(jù)EWeiser的定義,程序切片本身也是一個(gè)可執(zhí)行程序,它的行為應(yīng)該與源程序的那個(gè)特定子集是等價(jià)的。
[0005]程序切片是一種重要的程序分析和理解技術(shù),對(duì)程序進(jìn)行切片的過(guò)程就是去掉與興趣點(diǎn)無(wú)關(guān)的代碼,只保留特定計(jì)算相關(guān)的語(yǔ)句來(lái)分析程序。程序切片關(guān)注程序點(diǎn)之間的數(shù)據(jù)依賴和控制依賴等影響關(guān)系,通過(guò)對(duì)一個(gè)程序?qū)嵭星衅@得一個(gè)程序切片,該切片包含了可能對(duì)位于一個(gè)特定程序點(diǎn)的變量的值有影響的全部語(yǔ)句。程序切片技術(shù)在程序調(diào)試、回歸測(cè)試、軟件維護(hù)、程序理解以及逆向工程等方面有著廣泛的應(yīng)用?;诔绦蚯衅能浖y(cè)試是按照一定的切片準(zhǔn)則對(duì)軟件進(jìn)行分解和剪裁,從而在簡(jiǎn)化程序的同時(shí),使得程序切片代碼仍然反映源程序的部分特征。
[0006]JavaScript是一種基于對(duì)象和事件驅(qū)動(dòng)并具有相對(duì)安全性的客戶端腳本語(yǔ)言,同時(shí)也是一種廣泛用于客戶端Web開(kāi)發(fā)的直譯式腳本語(yǔ)言,通常包含在網(wǎng)頁(yè)的HTML語(yǔ)句中,由網(wǎng)頁(yè)瀏覽器執(zhí)行。常用于給HTML網(wǎng)頁(yè)添加動(dòng)態(tài)功能,比如響應(yīng)用戶的各種操作。目前針對(duì)傳統(tǒng)C++、Java等靜態(tài)語(yǔ)言的切片技術(shù)已趨向成熟,然而對(duì)于JavaScript等動(dòng)態(tài)語(yǔ)言進(jìn)行程序切片的研宄較少。這有兩個(gè)主要原因,一是在webl.0時(shí)代,JavaScript只被用在對(duì)簡(jiǎn)單客戶端的校驗(yàn)上,代碼相對(duì)簡(jiǎn)單而且量少,而到了 web2.0時(shí)代,JavaScript才被用于完成復(fù)雜的操作來(lái)實(shí)現(xiàn)多種功能。二是JavaScript與HTML交互頻繁,本身又具有靈活性和動(dòng)態(tài)性,分析起來(lái)較為困難。因此,針對(duì)JavaScript進(jìn)行程序切片的研宄就顯得十分重要。
[0007]針對(duì)web安全的問(wèn)題,國(guó)內(nèi)外學(xué)者做出了大量的研宄工作,提出了不少的有效的解決方案,取得了卓越的成果。然而由于各種原因,例如開(kāi)發(fā)人員考慮不周等,在代碼中會(huì)存在著一些路徑是不可達(dá)的,即這些路徑無(wú)論程序進(jìn)行任何輸入都無(wú)法被執(zhí)行。因此,不可達(dá)路徑的存在會(huì)給基于路徑的測(cè)試帶來(lái)困難,影響測(cè)試的充分性。JavaScript腳本語(yǔ)言的代碼中可能會(huì)含有一些包含不可達(dá)路徑的語(yǔ)句,對(duì)其進(jìn)行檢測(cè)有利于提高安全測(cè)試的效率。
[0008]目前,對(duì)于程序不可達(dá)路徑的研宄大多采用靜態(tài)分析方法。靜態(tài)分析方法是指在不執(zhí)行程序的情況下對(duì)程序進(jìn)行分析,即通過(guò)分析源碼的詞法語(yǔ)法、數(shù)據(jù)流、控制流等來(lái)挖掘程序的潛在問(wèn)題。主要使用符號(hào)評(píng)估、線性求解以及基于規(guī)則的校驗(yàn)等一些手段。這些技術(shù)盡管為測(cè)試研宄奠定了一定的基礎(chǔ),但是由于沒(méi)有考慮復(fù)雜性和可處理的程序類型等因素而有很大的限制。
[0009]由于靜態(tài)分析是在程序運(yùn)行前進(jìn)行的,它會(huì)假定程序的所有路徑都是可達(dá)的。然而程序中有一些路徑是不可達(dá)的,即無(wú)論采用何種輸入都不可能通過(guò)該路徑。那么靜態(tài)分析產(chǎn)生的結(jié)果可能會(huì)包含一些在實(shí)際執(zhí)行過(guò)程中并不會(huì)真正運(yùn)行的語(yǔ)句,即不可達(dá)路徑。而數(shù)據(jù)流測(cè)試中,假如選定的測(cè)試數(shù)據(jù)是針對(duì)那些位于不可達(dá)路徑上的語(yǔ)句,那么在測(cè)試過(guò)程中將并不會(huì)真正被測(cè)試到,這將對(duì)測(cè)試數(shù)據(jù)的生成階段造成大量的浪費(fèi)。換言之,不可達(dá)路徑的信息可以改善靜態(tài)分析的準(zhǔn)確性。
[0010]可以通過(guò)探測(cè)靜態(tài)分支的相關(guān)性來(lái)確定一部分不可達(dá)路徑。對(duì)于某一條路徑上的一個(gè)條件分支,如果它的結(jié)果可以由此之前的語(yǔ)句或分支確定,則它有靜態(tài)相關(guān)性。實(shí)驗(yàn)證明,對(duì)于大型程序來(lái)說(shuō),在編譯階段可以探測(cè)到約有9%到40%的條件語(yǔ)句有相關(guān)性。因此,有一定數(shù)量的不可達(dá)路徑在程序運(yùn)行前可以探測(cè)到。
[0011]盡管靜態(tài)方法可以排除一部分不可達(dá)路徑,但仍有大量的不可達(dá)路徑進(jìn)入了動(dòng)態(tài)測(cè)試階段。早期的動(dòng)態(tài)測(cè)試不能主動(dòng)地直接針對(duì)不可達(dá)路徑采取有效措施,通常在測(cè)試后采取限制的方法。較常見(jiàn)的方法是限定搜索次數(shù)和深度等,探視性執(zhí)行失敗即認(rèn)為路徑不可達(dá),該方法的局限性很大,很容易造成路徑的丟失,通過(guò)結(jié)合其他一些較好的搜索性算法可以改進(jìn)該方法,但效果有限。
[0012]參考文獻(xiàn):
[0013][1]M.ffeiser.Program Slicing.1n proceeding of ICSE' 81f the 5thinternat1nal conference on Software engineering, 439-4491981.
[0014][2] Hongchang Zhang,Shujuan Jiang, Rong Jin.An Improved StaticProgram Slicing Algorithm Using Stack Trace[A].Proceedings of 2011IEEE 2ndInternat1nal Conference on Software Engineering and Service Science (ICSESS2011) [C].2011.
【發(fā)明內(nèi)容】
:
[0015]技術(shù)問(wèn)題:本發(fā)明的目的是提出一種基于程序切片的軟件安全測(cè)試方法的設(shè)計(jì)方案,該方法將程序切片的思想應(yīng)用到對(duì)程序中不可達(dá)路徑的檢測(cè)中,提出了一種基于程序切片的不可達(dá)路徑檢測(cè)方案。該方法從網(wǎng)頁(yè)中提取的JavaScript腳本語(yǔ)言代碼出發(fā),通過(guò)將其轉(zhuǎn)換成為L(zhǎng)LVM中間表示,然后分別對(duì)其進(jìn)行靜態(tài)程序切片和動(dòng)態(tài)程序切片,并對(duì)切片結(jié)果進(jìn)行綜合分析,構(gòu)建一個(gè)程序不可達(dá)路徑的檢測(cè)方案,從而提高軟件的測(cè)試效率。最終目的是開(kāi)發(fā)一種基于程序切片的軟件安全測(cè)試方法。
[0016]技術(shù)方案:本發(fā)明提出了一種基于程序切片的軟件安全測(cè)試方法的設(shè)計(jì)方案,將程序切片的思想應(yīng)用到對(duì)程序中不可達(dá)路徑的檢測(cè)中,提出了一種基于程序切片的不可達(dá)路徑檢測(cè)方案。該方法從網(wǎng)頁(yè)中提取的JavaScript腳本語(yǔ)言代碼出發(fā),通過(guò)將其轉(zhuǎn)換成為L(zhǎng)LVM中間表示,然后分別對(duì)其進(jìn)行靜態(tài)程序切片和動(dòng)態(tài)程序切片,并對(duì)切片結(jié)果進(jìn)行綜合分析,構(gòu)建一個(gè)程序不可達(dá)路徑的檢測(cè)方案。由于靜態(tài)程序切片對(duì)程序的輸入不做任何假設(shè),所做的分析完全以程序的靜態(tài)信息為依據(jù),所以會(huì)把不可達(dá)路徑包含到切片結(jié)果中。然而對(duì)于動(dòng)態(tài)程序切片,它關(guān)注的是在某個(gè)特定輸入下執(zhí)行的路徑行為,而不會(huì)關(guān)注變量所有可能的輸入導(dǎo)致的路徑行為,因此動(dòng)態(tài)切片的結(jié)果往往不會(huì)含有不可達(dá)路徑。本文將靜態(tài)程序切片與動(dòng)態(tài)程序切片相結(jié)合,應(yīng)用在JavaScript腳本語(yǔ)言代碼的安全測(cè)試中,以檢測(cè)程序中的不可達(dá)路徑,從而提高軟件的測(cè)試效率。
[0017]LLVM是構(gòu)架編譯器的框架系統(tǒng),以C++編寫而成,用于優(yōu)化以任意程序語(yǔ)言編寫的程序的編譯時(shí)間、鏈接時(shí)間、運(yùn)行時(shí)間以及空閑時(shí)間,對(duì)開(kāi)發(fā)者保持開(kāi)放,并兼容已有腳本。對(duì)關(guān)注編譯技術(shù)的開(kāi)發(fā)人員,LLVM的主要優(yōu)點(diǎn)之一是提供與語(yǔ)言無(wú)關(guān)的中間代碼。這
當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1