一種結(jié)構(gòu)化查詢語言注入攻擊的檢測方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及網(wǎng)絡(luò)安全技術(shù)領(lǐng)域,尤其涉及一種結(jié)構(gòu)化查詢語言SQL注入攻擊的檢測方法及裝置。
【背景技術(shù)】
[0002]結(jié)構(gòu)化查詢語言(Structured Query Language,SQL)注入是一種技術(shù),經(jīng)常用來入侵一個網(wǎng)站。通過把SQL命令插入到網(wǎng)頁(Web)表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務(wù)器執(zhí)行惡意的SQL命令。
[0003]現(xiàn)有技術(shù)中SQL注入攻擊檢測技術(shù)的原理如下:維護一個SQL注入攻擊語句的正則特征庫,該SQL注入攻擊語句的正則特征庫中包括SQL注入語句以及SQL注入語句的正則表達式;從用戶輸入的超文本傳輸協(xié)議(HyperText Transfer Protocol,HTTP)請求統(tǒng)一資源定位符(Uniform Resource Locator,URL)中提取待檢測的SQL語句,將提取到的待檢測的SQL語句與SQL注入語句的正則特征庫進行正則匹配,如果匹配成功,則認為存在SQL注入攻擊。
[0004]現(xiàn)有技術(shù)中SQL注入攻擊檢測技術(shù)的關(guān)鍵是要維護一個合理的SQL注入攻擊語句的正則特征庫,一方面,由于SQL注入攻擊的多變性,SQL注入語句的正則特征庫覆蓋范圍不可能絕對全面,在將待檢測的SQL語句與SQL注入語句特征庫中的語句進行正則匹配時,誤報漏報率高;另一方面,隨著SQL注入語句正則特征庫的覆蓋范圍越來越大,在將待檢測的SQL語句與SQL注入語句正則特征庫進行正則匹配時,將花費大量時間,導致檢測效率非常低,這是正則匹配一個周知的缺點。
[0005]綜上所述,現(xiàn)有技術(shù)中在將待檢測的SQL語句與SQL注入語句正則特征庫進行正則匹配時,檢測效率低,而且誤報漏報率高。
【發(fā)明內(nèi)容】
[0006]本發(fā)明實施例提供了一種結(jié)構(gòu)化查詢語言SQL注入攻擊的檢測方法及裝置,用于提高SQL注入攻擊的檢測效率,降低誤報漏報率。
[0007]本發(fā)明實施例提供的一種結(jié)構(gòu)化查詢語言SQL注入攻擊的檢測方法,該方法包括:獲取待檢測的SQL語句,并對所述待檢測的SQL語句進行解析,得到所述待檢測的SQL語句中包含的詞法以及詞法順序,然后根據(jù)每一類詞法與特定字符或特定字符串的對應(yīng)關(guān)系和所述待檢測SQL語句中包含的詞法以及詞法順序?qū)⑺龃龣z測的SQL語句轉(zhuǎn)化為待檢測的字符串,其中,所述待檢測的字符串中包含的字符數(shù)量小于所述待檢測的SQL語句中包含的字符數(shù)量;將所述待檢測的字符串與預(yù)先存儲的SQL注入(SQL Inject1n, SQLI)語句對應(yīng)的字符串庫中的字符串進行匹配;當所述待檢測的字符串與所述預(yù)先存儲的SQLI語句對應(yīng)的字符串庫中任一字符串匹配成功時,則確定存在SQL注入攻擊。
[0008]本發(fā)明實施例提供的上述方法中,獲取待檢測的SQL語句,并對待檢測的SQL語句進行解析,得到待檢測的SQL語句中包含的詞法以及詞法順序,然后根據(jù)每一類詞法與特定字符或特定字符串的對應(yīng)關(guān)系和待檢測SQL語句中包含的詞法以及詞法順序?qū)⒋龣z測的SQL語句轉(zhuǎn)化為待檢測的字符串,將待檢測的字符串與預(yù)先存儲的SQLI語句對應(yīng)的字符串庫中的字符串進行匹配,與現(xiàn)有技術(shù)中將待檢測的SQL語句與SQL注入語句正則特征庫進行正則匹配相比,由于待檢測的字符串中包含的字符數(shù)量小于原始的待檢測的SQL語句中包含的字符數(shù)量,因此,在將待檢測的字符串與預(yù)先存儲的SQLI語句對應(yīng)的字符串庫中的字符串進行匹配時,減少了需要匹配的字符數(shù)量,從而縮短了匹配時間,提高了 SQL注入攻擊的檢測效率,同時,由于根據(jù)每一類詞法與特定字符或特定字符串的對應(yīng)關(guān)系和SQL語句中包含的詞法以及詞法順序?qū)QL語句轉(zhuǎn)化為對應(yīng)的字符串,也即每一特定字符或特定字符串代表SQL語句中的一類詞法屬性,因此,預(yù)先存儲的SQLI語句對應(yīng)的字符串庫中每一個字符串均可以代表一類SQL語句,而不僅僅代表一個具體的SQLI語句,使得在檢測SQL注入攻擊時,無論待檢測的SQL語句如何變化,只要待檢測的SQL語句對應(yīng)的待檢測的字符串與預(yù)先存儲的SQLI語句對應(yīng)的字符串庫中的字符串相匹配,則確定存在SQL注入攻擊,與現(xiàn)有技術(shù)中只有在發(fā)現(xiàn)待檢測的SQL語句與SQL注入語句正則特征庫中存儲的SQL注入語句完全一致時才能確定存在SQL注入攻擊相比,能夠識別未知的SQL注入攻擊,降低誤報漏報率。
[0009]在一種可能的實施方式中,本發(fā)明實施例提供的上述方法中,在所述根據(jù)每一類詞法與特定字符或特定字符串的對應(yīng)關(guān)系和所述待檢測SQL語句中包含的詞法以及詞法順序?qū)⑺龃龣z測的SQL語句轉(zhuǎn)化為待檢測的字符串之后,將所述待檢測的字符串與預(yù)先存儲的SQLI語句對應(yīng)的字符串庫中的字符串進行匹配之前,該方法還包括:確定所述待檢測的字符串中包含的字符是否滿足預(yù)設(shè)等級的條件;將所述待檢測的字符串與預(yù)先存儲的SQLI語句對應(yīng)的字符串庫中的字符串進行匹配,具體包括:當所述待檢測的字符串中包含的字符滿足預(yù)設(shè)等級的條件時,則將所述待檢測的字符串與預(yù)先存儲的SQLI語句對應(yīng)的字符串庫中的字符串進行匹配。
[0010]本發(fā)明實施例提供的上述方法中,在根據(jù)每一類詞法與特定字符或特定字符串的對應(yīng)關(guān)系和待檢測SQL語句中包含的詞法以及詞法順序?qū)⒋龣z測的SQL語句轉(zhuǎn)化為待檢測的字符串之后,將待檢測的字符串與預(yù)先存儲的SQLI語句對應(yīng)的字符串庫中的字符串進行匹配之前,確定待檢測的字符串中包含的字符是否滿足預(yù)設(shè)等級的條件,當待檢測的字符串中包含的字符滿足預(yù)設(shè)等級的條件時,將待檢測的字符串與預(yù)先存儲的SQLI語句對應(yīng)的字符串庫中的字符串進行匹配,由于只有滿足預(yù)設(shè)等級條件的待檢測的字符串與預(yù)先存儲的SQLI語句對應(yīng)的字符串庫中的字符串進行匹配,不滿足預(yù)設(shè)等級的條件的待檢測的字符串不與預(yù)先存儲的SQLI語句對應(yīng)的字符串庫中的字符串進行匹配,從而能夠進一步提尚檢測的效率,同時可以控制檢測的深度。
[0011]在一種可能的實施方式中,本發(fā)明實施例提供的上述方法中,所述預(yù)設(shè)等級的條件至少包括以下兩個:條件一:所述待檢測的字符串中包含指定字符;條件二:所述待檢測的字符串中包含的字符數(shù)量大于或等于預(yù)設(shè)數(shù)量。
[0012]在一種可能的實施方式中,本發(fā)明實施例提供的上述方法中,不同類詞法對應(yīng)的特定字符或特定字符串不同。
[0013]在一種可能的實施方式中,本發(fā)明實施例提供的上述方法中,所述預(yù)先存儲的SQLI語句對應(yīng)的字符串庫通過如下方式獲得:輸入SQL語句,并對輸入的SQL語句進行解析,得到輸入的SQL語句中包含的詞法以及詞法順序,然后根據(jù)每一類詞法與特定字符或特定字符串的對應(yīng)關(guān)系和輸入的SQL語句中包含的詞法以及詞法順序?qū)⑤斎氲腟QL語句轉(zhuǎn)化為對應(yīng)的字符串;通過用于區(qū)分常規(guī)SQL語句對應(yīng)的字符串和SQLI語句對應(yīng)的字符串的算法將輸入的SQL語句對應(yīng)的字符串劃分為常規(guī)SQL語句對應(yīng)的字符串和SQLI語句對應(yīng)的字符串,存儲所述SQLI語句對應(yīng)的字符串組成預(yù)先存儲的SQLI語句對應(yīng)的字符串庫,其中,輸入的SQL語句包括常規(guī)SQL語句和SQL注入語句。
[0014]本發(fā)明實施例提供的一種結(jié)構(gòu)化查詢語言SQL注入攻擊的檢測裝置,包括:處理單元,用于獲取待檢測的SQL語句,并對所述待檢測的SQL語句進行解析,得到所述待檢測的SQL語句中包含的詞法以及詞法順序,然后根據(jù)每一類詞法與特定字符或特定字符串的對應(yīng)關(guān)系和所述待檢測SQL語句中包含的詞法以及詞法順序?qū)⑺龃龣z測的SQL語句轉(zhuǎn)化為待檢測的字符串,其中,所述待檢測的字符串中包含的字符數(shù)量小于所述待檢測的SQL語句中包含的字符數(shù)量;匹配單元,用于將所述待檢測的字符串與預(yù)先存儲的SQL注入SQLI語句對應(yīng)的字符串庫中的字符串進行匹配;確定單元,用于當所述待檢測的字符串與所述預(yù)先存儲的SQLI語句對應(yīng)的字符串庫中任一字符串匹配成功時,則確定存在SQL注入攻擊。
[0015]本發(fā)明實施例提供的上述裝置中,獲取待檢測的SQL語句,并對待檢測的SQL語句進行解析,得到待檢測的SQL語句中包含的詞法以及詞法順序,然后根據(jù)每一類詞法與特定字符或特定字符串的對應(yīng)關(guān)系和待檢測SQL語句中包含的詞法以及詞法順序?qū)⒋龣z測的SQL語句轉(zhuǎn)化為待檢測的字符串,將待檢測的字符串與預(yù)先存儲的SQLI語句對應(yīng)的字符串庫中的字符串進行匹配,與現(xiàn)有技術(shù)中將待檢測的SQL語句與SQL注入語句正則特征庫進行正則匹配相比,由于待檢測的字符串中包含的字符數(shù)量小于原始的待檢測的SQL語句中包含的字符數(shù)量,因此,在將待檢測的字符串與預(yù)先存儲的SQLI語句對應(yīng)的字符串庫中的字符串進行匹配時,減少了需要匹配的字符數(shù)量,從而縮短了匹配時間,提高了 SQL注入攻擊的檢測效率,同時,由于根據(jù)每一類詞法與特定字符或特定字符串的對應(yīng)關(guān)系和SQL語句中包含的詞法以及詞法順序?qū)QL語句轉(zhuǎn)化為對應(yīng)的字符串,也即每一特定字符或特定字符串代表SQL語句中的一類詞法屬性,因此,預(yù)先存儲的SQLI語句對應(yīng)的字符串庫中每一個字符串均可以代表一類SQL語句,而不僅僅代表一個具體的SQLI語句,使得在檢測SQL注入攻擊時,無論待檢測的SQL語句如何變化,只要待檢測的SQL語句對應(yīng)的待檢測的字符串與預(yù)先存儲的SQLI語句對應(yīng)的字符串庫中的字符串相匹配,則確定存在SQL注入攻擊,與現(xiàn)有技術(shù)中只有在發(fā)現(xiàn)待檢測的SQL語句與SQL注入語句正則特征庫中存儲的SQL注入語句完全一致時才能確定存在SQL注入攻擊相比,能夠識別未知的SQL注入攻擊,降低誤報漏報率。
[0016]在一種可能的實施方式中,本發(fā)明實施例提供的上述裝置中,該裝置還包括:檢測等級確定單元,用于在所述處理單元根據(jù)每一類詞法與特定字符或特定字符串的對應(yīng)關(guān)系和所述待檢測SQL語句中包含的詞法以及詞法順序?qū)⑺龃龣z測的SQL語句轉(zhuǎn)化為待檢測的字符串之后,所述匹配單元將所述待檢測的字符串與預(yù)先存儲的SQLI語句對應(yīng)的字符串庫中的字符串進行匹配之前,確定所述待檢測的字符串中包含的字