欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種PHP語言Web應用中不可信變量靜態(tài)檢測方法

文檔序號:6605874閱讀:148來源:國知局
專利名稱:一種PHP語言Web應用中不可信變量靜態(tài)檢測方法
技術領域
本發(fā)明涉及Web應用中引發(fā)安全問題的不可信變量的靜態(tài)檢測,特別針對廣泛用 于Web應用編程的PHP語言,通過析取PHP代碼結構,采用靜態(tài)分析的方法快速定位Web應 用中可能存在的不可信變量,有效解決弱類型和無類型語言編寫的Web應用中不可信變量 難以檢測的問題。
背景技術
當今,人們越來越多的社會活動通過Web應用完成,如購物、理財、辦公和即時通 訊等,這要求Web應用具有高可靠性和安全性。Web應用接收的輸入數(shù)據(jù)將直接影響到系統(tǒng) 的可靠性和安全性。同來源于本地數(shù)據(jù)庫和文件的輸入數(shù)據(jù)相比,通過用戶交互過程由用 戶輸入到Web應用系統(tǒng)中的數(shù)據(jù)尤其難以控制,容易引發(fā)安全性問題和Web應用故障。這 類用戶輸入數(shù)據(jù)稱為不可信數(shù)據(jù),而能夠接收和攜帶不可信數(shù)據(jù)的變量,就是不可信變量。目前用于檢測不可信變量的方法主要包括兩大類基于HTTP協(xié)議的動態(tài)檢測(簡 稱HTTP法),以及基于參數(shù)函數(shù)PF (ParameterFunction)的靜態(tài)檢測(簡稱PF法)。HTTP 法會在Web應用中加載一個模塊,動態(tài)記錄傳送到服務器端的變量〈name,value〉對。HTTP 法與Web應用的實現(xiàn)無關;其缺點是該方法能夠檢測到的變量僅限于測試者訪問到的變 量,如果一些潛藏的不可信變量在測試過程中沒有使用,就會給系統(tǒng)留下安全隱患;而潛藏 的不可信變量會在不經(jīng)意的設計和編程過程中出現(xiàn),也有可能是系統(tǒng)預留的后門。Web應用中,PF函數(shù)用于獲取變量的〈name,value〉對。PF法通過靜態(tài)檢測所有的 PF函數(shù)查找Web應用中存在的不可信變量。PF法不容易遺漏顯式定義的不可信變量,如果 Web應用編程遵循所有變量采用顯式定義的方式,PF法是有效的。但是目前大量的Web應 用中普遍存在一些“技巧”可以通過已有變量的值繼續(xù)定義新的變量,PHP語言編寫的Web 應用這種情況十分常見;這樣處理可以使程序小巧且功能強大,但問題是如此處理新變量 等于繞過了 PF函數(shù),從而使PF法失去檢測效果。

發(fā)明內(nèi)容
本發(fā)明的主要目的是針對PHP語言編寫的Web應用中易引發(fā)安全問題的不可信變 量,提出一種通過析取PHP代碼的模塊結構,采用靜態(tài)程序分析來識別功能模塊中不可信 變量的方法,輔助Web應用開發(fā)和維護人員快速檢測安全漏洞,該方法相對現(xiàn)有技術實現(xiàn) 簡單,識別率較高,且具有良好的可擴展性,能有效解決現(xiàn)有方法在弱類型和無類型語言編 寫的Web應用中難以有效檢測不可信變量的問題。為實現(xiàn)上述目的,本發(fā)明采用如下的步驟1)識別PHPWeb應用的所有入口文件;2)由入口文件出發(fā),析取PHP Web應用的每個功能模塊的PHP代碼,同時避開HTML 代碼的干擾,通過代碼中的包含(include/require)語句采用迭代方法整合所有相關的 PHP文件和代碼;
3)以整合后的每一個PHPWeb應用的功能模塊為單位,采用靜態(tài)分析的方法識別 其中的不可信變量;4)匯總所有模塊的解析結果,每個模塊的解析結果都是一個不可信變量的集合, 匯總時取各集合的并集并生成報告,報告中對每一個不可信變量都記錄其所屬的PHP文件 和文件中的具體位置。上述步驟1)的入口文件識別過程為從Web應用主目錄開始,遍歷目錄下所有文 件項構成集合W ;針對W中的每一個文件項,如果文件項是目錄(文件夾),則遍歷該目錄下 所有文件項并添加到集合W中;如果文件項是一個文件,且是PHP文件,則判定該文件是否 具有入口文件特征如果是入口文件則將其添加到入口文件集合中;否則忽略該文件。遍 歷和識別所有文件項直到集合W為空,最后得到Web應用的入口文件集合。上述步驟2)的功能模塊整合過程為針對一個入口文件f,首先獲取其中的PHP 代碼構成代碼集Cf ;然后初始化文件集合I,用于記錄已包含的文件;接下來獲取代碼集Cf 中的所有包含語句并組成集合S ;針對集合S中的每一條包含語句S,首先確定語句S中引 用的文件is ;如果引用的文件is沒有出現(xiàn)在初始化文件集合I中,或者包含指令不是一次 包含,則讀入文件is,析取其中的PHP代碼,用以替換代碼集Cf中包含語句s的出現(xiàn)位置;接 下來將文件is記錄入集合初始化文件I,并將其PHP代碼中可能出現(xiàn)的包含語句再添加到 集合S中;如果語句s是一次包含,且文件is已在初始化文件集合I中,則語句s被忽略, 代碼集Cf中對應位置替換為空串;按此循環(huán)直到集合S中所有的包含語句都被處理且不再 有新的包含語句加入;處理完畢后得到整合后的代碼集Cf代表一個完整的功能模塊。上述步驟3的不可信變量的識別過程為首先將所有變量歸為三種類型類變量 (class_var)、已定義變量(def ined_var)、以及不可信變量(untrusted_var),然后基于整 合后的每一個PHP Web應用的功能模塊,每次析取代碼集Cf中的三個詞,根據(jù)對詞的語義 識別確定該代碼集(功能模塊)中的不可信變量。詞的語義識別分成5種情況,以確定不 可信變量,包括情況1.“V”標示的變量名,說明是一個變量;情況2.“new”運算符,緊跟其后的詞是一個類變量(classjar); 情況3. 由“(”符號標示的函數(shù)名,說明是一個函數(shù)調(diào)用,則進入函數(shù)體獲取所有全局性變量,;情況4.由引號括起的字符串,則在字符串中獲取所有全局性變量;情況5. “l(fā)ist”關鍵字,將其中出現(xiàn)的所有變量視為已定義變量;其中對于情況1、3和4,確定是否為不可信變量的步驟是如果該變量是第一次 出現(xiàn),且為定義性出現(xiàn),則變量是已定義變量(def inecLvar),置入已定義變量集合,并存儲 變量的變量作用域;如果是使用性出現(xiàn),則該變量是不可信變量(untrustecLvar);。而判定變量是否第一次出現(xiàn)步驟是將該變量匹配已定義變量集合,如果能夠匹 配且在作用域內(nèi),則忽略該變量;如果不能匹配或已在作用域之外,則該變量是第一次出 現(xiàn)。本發(fā)明方法針對弱類型的PHP語言編寫的Web應用,提出從入口文件識別開始,基 于每個入口文件獲取Web應用功能模塊;然后以模塊為單位采用靜態(tài)代碼分析的方法解析 不可信變量。本發(fā)明方法同現(xiàn)有方法相比較,具有實現(xiàn)簡單,性能優(yōu)越,不干擾Web應用實際運營性能等優(yōu)點?;诖笮蚉HP Web應用的實驗結果比對表明,本發(fā)明方法能夠高效檢 測Web應用中的不可信變量。本方法還可以方便的拓展到其他的弱類型或無類型Web應用 編程語言,具有良好的可擴展性。


圖1是Web應用不可信變量靜態(tài)檢測方法的總體框架,圖2是用戶的HTTP請求同入口文件(網(wǎng)頁)的對應關系圖,圖3是入口文件識別的處理流程圖,圖4是PHPWeb應用中功能模塊的組織結構圖,圖5是整合Web應用功能模塊的處理流程圖,圖6是檢測單個模塊中不可信變量的處理流程圖。
具體實施例方式圖1所示為PHP語言Web應用中不可信變量靜態(tài)檢測方法的技術框架。框架的輸 入是PHP Web應用服務器端文件;輸出是不可信變量匯總報告。技術框架分成四個主要模 塊識別PHP Web應用的入口文件;整合PHP Web應用的功能模塊;解析功能模塊的不可信 變量;匯總不可信變量檢測結果。首先識別PHP Web應用的所有入口文件??紤]服務器端的PHP Web應用文件,一 個Web應用可視為主目錄(文件夾)下的一組文件集合,即W = {f1; f2,. . .,fn}。其中一 部分PHP文件是Web應用的入口文件,如常用的“ index, php ”文件。入口文件通常同使用 者的HTTP請求直接對應,是調(diào)用一組/類Web應用功能的入口。圖2所示為用戶的HTTP 請求同入口文件的對應關系圖。多個HTTP請求可能對應同一個入口文件,通過不同的參數(shù) 設置調(diào)用不同的Web應用功能。入口文件的特征同具體的Web應用編程有關,一般會先引用系統(tǒng)公用文件,即包 含通用功能或全局性(如配置)變量的PHP文件;而非入口文件一般有禁止訪問標識。圖 3所示為識別入口文件的處理流程圖。入口文件必須是PHP文件;而Web應用的文件通常 處于不同的目錄下,需要遞歸的訪問主目錄下所有子目錄,直到所有文件都被訪問。Web應用中入口文件的識別過程為從Web應用主目錄開始,遍歷目錄下所有文件 項構成集合W ;針對W中的每一個文件項,如果文件項是目錄(文件夾),則遍歷該目錄下所 有文件項并添加到集合W中;如果文件項是一個文件,且是PHP文件,則判定該文件是否具 有入口文件特征如果是入口文件則將其添加到入口文件集合中;否則忽略該文件。遍歷 和識別所有文件項直到集合W為空,最后得到Web應用的入口文件集合。其次整合PHP Web應用的功能模塊。從使用功能角度考慮,PHP Web應用可視為一 組功能模塊的集合,即W = Im1, m2,. . .,mj。本發(fā)明定義一個功能模塊由一個入口文件出 發(fā),是層層關聯(lián)(引用)的所有PHP文件的閉包集,整合過程中析取PHP代碼,避開HTML代 碼的干擾。通過代碼中的包含(include/require)語句采用迭代方法整合所有相關的PHP 文件和代碼;處理包含語句時需要區(qū)分一次性包含和多次包含。圖4所示為PHP Web應用 中功能模塊的組織結構圖。如圖所示,一個功能模塊由一個入口文件出發(fā),包含層層引用和 關聯(lián)的一組PHP文件。一個公用或共享的PHP文件可能同時屬于多個功能模塊。
圖5所示為整合Web應用功能模塊的處理流程圖。整合過程中只考慮PHP代碼,避 開HTML代碼的干擾。通過代碼中的包含(include/require)語句采用迭代方法整合所有 相關的PHP文件和代碼。其中需要區(qū)分一次包含指令(includejnceO/requirejnceO) 和多次包含指令(include () /require ())。按圖5,針對一個入口文件f,首先獲取其中的PHP代碼構成Cf ;然后初始化文件集 合I,用于記錄已包含的文件;接下來獲取Cf中的所有包含語句并組成集合(隊列)S。針 對集合S中的每一條包含語句S,首先確定語句S中引用的文件is ;如果is沒有出現(xiàn)在集合 I中,或者包含指令不是一次包含,則讀入文件is,析取其中的PHP代碼,用以替換Cf中包含 語句s的出現(xiàn)位置;接下來將is記錄入集合I,并將其PHP代碼中可能出現(xiàn)的包含語句再添 加到集合S中。如果s是一次包含,且is已在集合I中,則語句s被忽略,Cf中對應位置替 換為空串。按此循環(huán)直到集合S中所有的包含語句都被處理且不再有新的包含語句加入。 處理完畢后得到的整合代碼Cf代表一個完整的功能模塊。再次解析每個功能模塊中的不可信變量。PHP代碼中變量的定義和初始化一般是 同時進行的,變量的初始化可認為是變量的定義性出現(xiàn)。如果一個變量出現(xiàn)時,直接是使用 性出現(xiàn),系統(tǒng)會動態(tài)的確定該變量的類型,并賦給一個相應的初始值。一個具有全局效應的 變量首次出現(xiàn)就是使用性出現(xiàn),那么可以認為該變量為不可信變量。一個變量是否具有全 局效應及其作用的范圍需要整合代碼后才能完全確定。不可信變量在沒有初始化前就直接 被使用,其初始值不確定;在存在攻擊的情況下,會為Web應用帶來安全威脅。解析不可信變量以整合后的每一個PHP功能模塊(對應Web應用的一組/類功 能)Cf為單位,采用靜態(tài)分析的方法識別其中可能存在的不可信變量。圖6所示為檢測單 個模塊中不可信變量的處理流程圖,輸入是單個模塊的整合代碼Cf,輸出是解析得到的模 塊中不可信變量集合U。本發(fā)明將PHP變量歸為三種類型類變量(class_var)、已定義變 量(defined_var)、以及不可信變量(untrusted_var)。分析時每次讀取代碼中的三個詞 (word),識別詞的語義分以下5種情況情況1. “$”標示的變量名,說明是一個變量。需要判斷是否是第一次出現(xiàn),以及 是定義性出現(xiàn)還是使用性出現(xiàn)。在第一次出現(xiàn)的情形下,如果是定義性出現(xiàn),則變量是已定 義變量(definecLvar),添加入已定義變量集合,并存儲變量的有效范圍(即作用域)信息。 如果是使用性出現(xiàn),則該變量是不可信變量(untrustecLvar)。判定是否是第一次出現(xiàn)需要匹配已定義變量集合,如果能夠匹配且在作用域內(nèi), 則忽略該變量;如果不能匹配或已在作用域之外,則該變量是第一次出現(xiàn)。情況2. “new”運算符,緊跟其后的詞是一個類變量(classjar);情況3.由“(”符號標示的函數(shù)名,說明是一個函數(shù)調(diào)用。函數(shù)或者是普通函數(shù), 或者是類變量的成員函數(shù)。此時需要進入函數(shù)體檢查不可信變量;情況4.由引號括起的字符串,此時需要在字符串中檢查不可信變量;對于情況3和情況4,只需要識別其中的全局性變量,并確定是不可信變量還是已 定義變量。情況5. “l(fā)ist”關鍵字,將其中出現(xiàn)的所有變量視為已定義變量,添加入已定義變 量集合并存儲作用域信息。最后匯總所有模塊的解析結果,生成Web應用不可信變量檢測報告。每個功能模時簡單取各集合的并集。其中注意即使存 在同名的不可信變量,它們?nèi)匀淮聿煌淖兞?。對每一個不可信變量記錄其所屬的PHP 文件和文件中的具體位置。為驗證本發(fā)明方法的有效性,我們選擇大型PHP Web應用Discuz ! 6. 0.0作為實 驗對象。傳統(tǒng)的PF檢測法對Discuz !系統(tǒng)基本無效。實驗中用本發(fā)明方法和動態(tài)的HTTP 法做比較。下表所示為兩種方法對Discuz !系統(tǒng)中10個最常用的功能模塊(入口文件) 檢測結果的比對數(shù)據(jù),其中HTTP法為連續(xù)運行12天獲得的檢測數(shù)據(jù)。
由表中數(shù)據(jù)可以發(fā)現(xiàn),在大多數(shù)情況下本發(fā)明方法的檢測結果要優(yōu)于HTTP法。 Discuz !系統(tǒng)共有36個功能模塊,HTTP法連續(xù)運行12天只發(fā)現(xiàn)其中29個模塊的不可信 變量,其中26個模塊本發(fā)明方法檢測結果更優(yōu);另外本發(fā)明方法還檢測出剩余7個模塊的 不可信變量。HTTP法需要在Web應用中加載檢測模塊,因此會對Web應用性能產(chǎn)生一定影 響;另外HTTP法需要持續(xù)運行較長一段時間才能夠發(fā)現(xiàn)足夠多的不可信變量。本發(fā)明方法 不存在這些問題。除此以外,本發(fā)明方法也可以方便的拓展到其他的弱類型或無類型Web 應用編程語言,具有良好的可擴展性。
權利要求
一種PHP語言Web應用中不可信變量的靜態(tài)檢測方法,其特征在于包括以下步驟1)識別PHP Web應用的所有入口文件;2)由入口文件出發(fā),析取PHP Web應用的每個功能模塊的PHP代碼,同時避開HTML代碼的干擾,通過代碼中的包含(include/require)語句采用迭代方法整合所有相關的PHP文件和代碼;3)以整合后的每一個PHP Web應用的功能模塊為單位,采用靜態(tài)分析的方法識別其中的不可信變量;4)匯總所有模塊的解析結果,每個模塊的解析結果都是一個不可信變量的集合,匯總時取各集合的并集并生成報告,報告中對每一個不可信變量都記錄其所屬的PHP文件和文件中的具體位置。
2.根據(jù)權利要求1所述的PHP語言Web應用中不可信變量的靜態(tài)檢測方法,其特征在 于步驟1)的入口文件識別過程為從Web應用主目錄開始,遍歷目錄下所有文件項構成集 合W ;針對W中的每一個文件項,如果文件項是目錄,則遍歷該目錄下所有文件項并添加到 集合W中;如果文件項是一個文件,且是PHP文件,則判定該文件是否具有入口文件特征 如果是入口文件則將其添加到入口文件集合中;否則忽略該文件。遍歷和識別所有文件項 直到集合W為空,最后得到Web應用的入口文件集合。
3.根據(jù)權利要求1或2所述的PHP語言Web應用中不可信變量的靜態(tài)檢測方法,其特 征在于步驟2)的功能模塊整合過程為針對一個入口文件f,首先獲取其中的PHP代碼構 成代碼集Cf ;然后初始化文件集合I,用于記錄已包含的文件;接下來獲取代碼集Cf中的所 有包含語句并組成集合S ;針對集合S中的每一條包含語句s,首先確定語句s中引用的文 件is ;如果引用的文件is沒有出現(xiàn)在初始化文件集合I中,或者包含指令不是一次包含,則 讀入文件is,析取其中的PHP代碼,用以替換代碼集Cf中包含語句s的出現(xiàn)位置;接下來將 文件is記錄入集合初始化文件I,并將其PHP代碼中可能出現(xiàn)的包含語句再添加到集合S 中;如果語句s是一次包含,且文件is已在初始化文件集合I中,則語句s被忽略,代碼集 Cf中對應位置替換為空串;按此循環(huán)直到集合S中所有的包含語句都被處理且不再有新的 包含語句加入;處理完畢后得到整合后的代碼集Cf代表一個完整的功能模塊。
4.根據(jù)權利要求3所述的PHP語言Web應用中不可信變量的靜態(tài)檢測方法,其特征 在于步驟3)的不可信變量的識別過程為首先將所有變量歸為三種類型類變量(claSS_ var)、已定義變量(definecLvar)、以及不可信變量(untrustecLvar),然后基于整合后的 每一個PHP Web應用的功能模塊,每次析取代碼集Cf中的三個詞,根據(jù)對詞的語義識別確 定該代碼集(功能模塊)中的不可信變量。
5.根據(jù)權利要求4所述的PHP語言Web應用中不可信變量的靜態(tài)檢測方法,其特征在 于詞的語義識別及不可信變量的確定分成5種情況,包括情況1. “$”標示的變量名,說明是一個變量;情況2. “new”運算符,緊跟其后的詞是一個類變量(classjar);情況3.由“(”符號標示的函數(shù)名,說明是一個函數(shù)調(diào)用,則進入函數(shù)體獲取所有全局 性變量;情況4.由引號括起的字符串,則在字符串中獲取所有全局性變量;情況5. “l(fā)ist”關鍵字,將其中出現(xiàn)的所有變量視為已定義變量;其中,對于情況1、3和4,確定是否為不可信變量的步驟是如果該變量是第一次出現(xiàn), 且為定義性出現(xiàn),則變量是已定義變量(definecLvar),置入已定義變量集合,并存儲變量 的變量作用域;如果第一次出現(xiàn)是使用性出現(xiàn),則該變量是不可信變量(untrustecLvar)。
6.根據(jù)權利要求5的PHP語言Web應用中不可信變量的靜態(tài)檢測方法,其特征在于判 定變量是否第一次出現(xiàn)步驟是將該變量匹配已定義變量集合,如果能夠匹配且在作用域 內(nèi),則忽略該變量;如果不能匹配或已在作用域之外,則該變量是第一次出現(xiàn)。
全文摘要
本發(fā)明公開了一種PHP語言Web應用中不可信變量靜態(tài)檢測方法,其步驟是1)識別PHP Web應用的所有入口文件;2)由入口文件出發(fā),析取PHP代碼,同時避開HTML代碼的干擾,采用迭代方法整合所有相關的PHP文件和代碼;3)以整合后的功能模塊為單位,采用靜態(tài)分析的方法識別其中的不可信變量;4)匯總所有模塊的解析結果并生成報告,每一個不可信變量都記錄其所屬的PHP文件和具體位置。本發(fā)明相對現(xiàn)有技術實現(xiàn)簡單,識別率較高,且具有良好的可擴展性,能有效解決現(xiàn)有方法在弱類型和無類型語言編寫的Web應用中難以有效檢測不可信變量的問題。
文檔編號G06F21/00GK101916340SQ201010226460
公開日2010年12月15日 申請日期2010年7月14日 優(yōu)先權日2010年7月14日
發(fā)明者彭樹深, 陳曉安, 陳道蓄, 顧慶 申請人:南京大學
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
广州市| 怀仁县| 乌兰县| 天镇县| 宁德市| 永宁县| 洛川县| 连平县| 康平县| 佳木斯市| 汝城县| 田阳县| 利津县| 扎赉特旗| 电白县| 新化县| 黄山市| 阿图什市| 苍山县| 宁河县| 凤凰县| 西吉县| 玉环县| 平昌县| 肃北| 肃南| 成武县| 沽源县| 德格县| 于都县| 克拉玛依市| 垦利县| 鹤庆县| 吉林省| 津市市| 彰武县| 安岳县| 镇江市| 江城| 合作市| 太白县|