本發(fā)明涉及計算機技術(shù)領(lǐng)域,特別涉及一種SQL注入攻擊檢測方法和裝置。
背景技術(shù):
SQL(Structured Query Language,結(jié)構(gòu)化查詢語言)注入,就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務(wù)器執(zhí)行惡意的SQL命令。SQL注入的存在,對數(shù)據(jù)庫中數(shù)據(jù)的安全造成威脅。為了應(yīng)對SQL注入,管理者一般采用第三方工具進行SQL注入攻擊檢測,例如,SQLmap工具。但是,對于同一個URL(Uniform Resource Locator,統(tǒng)一資源定位符)存在多個參數(shù)時,當(dāng)發(fā)送多個請求時,現(xiàn)有的檢測工具會將相同的URL過濾掉,造成漏測,進而造成數(shù)據(jù)庫的安全性較低。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供了一種SQL注入攻擊檢測方法和裝置,能夠降低SQL注入攻擊的漏測率。
一方面,本發(fā)明實施例提供了一種SQL注入攻擊檢測方法,包括:
S1:獲取當(dāng)前組中的至少一個待檢測HTTP(HyperText Transfer Protocol,超文本傳輸協(xié)議)請求,每個所述待檢測HTTP請求,包括:URL和請求正文;
S2:根據(jù)每個所述待檢測HTTP請求的URL和請求正文,生成每個所述待檢測HTTP請求對應(yīng)的請求標(biāo)識,針對每個所述請求標(biāo)識,對當(dāng)前請求標(biāo)識對應(yīng)的請求標(biāo)識相同的待檢測HTTP請求中的一個待檢測HTTP請求,進行SQL注入攻擊檢測。
優(yōu)選地,
在所述S1之后,在所述S2之前,進一步包括:
設(shè)置所述當(dāng)前組對應(yīng)的請求標(biāo)識列表,所述請求標(biāo)識列表,用于存儲請求標(biāo)識;
所述S2,包括:
針對每個所述待檢測HTTP請求,根據(jù)當(dāng)前待檢測HTTP請求的URL和請求正文,生成所述當(dāng)前待檢測HTTP請求對應(yīng)的當(dāng)前請求標(biāo)識;判斷所述請求標(biāo)識列表中是否存在與所述當(dāng)前請求標(biāo)識相同的請求標(biāo)識,如果是,結(jié)束當(dāng)前流程,否則,將所述當(dāng)前請求標(biāo)識添加到所述請求標(biāo)識中,并對所述當(dāng)前待檢測HTTP請求進行SQL注入攻擊檢測。
優(yōu)選地,
所述根據(jù)當(dāng)前待檢測HTTP請求的URL和請求正文,生成所述當(dāng)前待檢測HTTP請求對應(yīng)的當(dāng)前請求標(biāo)識,包括:
確定當(dāng)前待檢測HTTP請求的請求正文中包含的每一個參數(shù)的參數(shù)名稱;
將所述每一個參數(shù)的參數(shù)名稱,按照預(yù)設(shè)的排序規(guī)則進行排序,生成子請求標(biāo)識;
將所述子請求標(biāo)識與所述當(dāng)前待檢測HTTP請求的URL進行合并,生成所述當(dāng)前待檢測HTTP請求的當(dāng)前請求標(biāo)識。
優(yōu)選地,
進一步包括:預(yù)先設(shè)置至少一個SQL注入關(guān)鍵字;
所述對當(dāng)前請求標(biāo)識對應(yīng)的請求標(biāo)識相同的待檢測HTTP請求中的一個待檢測HTTP請求,進行SQL注入攻擊檢測,包括:
判斷所述當(dāng)前請求標(biāo)識對應(yīng)的請求標(biāo)識相同的待檢測HTTP請求中的一個待檢測HTTP請求中,是否存在任意一個所述SQL注入關(guān)鍵字,如果是,則認(rèn)定所述當(dāng)前請求標(biāo)識對應(yīng)的請求標(biāo)識相同的待檢測HTTP請求中的一個待檢測HTTP請求存在SQL注入攻擊,否則,則認(rèn)定所述當(dāng)前請求標(biāo)識對應(yīng)的請求標(biāo)識相同的待檢測HTTP請求中的一個待檢測HTTP請求不存在SQL注入攻擊。
優(yōu)選地,
進一步包括:
預(yù)先設(shè)置至少一個無效請求擴展名;
在所述S1之前,進一步包括:
獲取外部發(fā)來的至少一個待過濾HTTP請求,每個所述待過濾HTTP請求,包括:URL和請求正文;
針對每個所述待過濾HTTP請求,確定當(dāng)前待過濾HTTP請求的URL中的當(dāng)前擴展名,判斷所述當(dāng)前擴展名是否與任意一個所述無效請求擴展名相同,如果是,則所述當(dāng)前待過濾HTTP請求為無效請求,結(jié)束當(dāng)前流程,否則,將所述當(dāng)前待過濾HTTP請求作為所述待檢測HTTP請求,添加到所述當(dāng)前組中,執(zhí)行S1。
另一方面,本發(fā)明實施例提供了一種SQL注入攻擊檢測裝置,包括:
第一獲取單元,用于獲取當(dāng)前組中的至少一個待檢測HTTP請求,每個所述待檢測HTTP請求,包括:URL和請求正文;
第一處理單元,用于根據(jù)所述第一獲取單元獲取的每個所述待檢測HTTP請求的URL和請求正文,生成每個所述待檢測HTTP請求對應(yīng)的請求標(biāo)識,針對每個所述請求標(biāo)識,對當(dāng)前請求標(biāo)識對應(yīng)的請求標(biāo)識相同的待檢測HTTP請求中的一個待檢測HTTP請求,進行SQL注入攻擊檢測。
優(yōu)選地,
進一步包括:第一設(shè)置單元,用于設(shè)置所述當(dāng)前組對應(yīng)的請求標(biāo)識列表,所述請求標(biāo)識列表,用于存儲請求標(biāo)識;
所述第一處理單元,用于針對每個所述待檢測HTTP請求,根據(jù)當(dāng)前待檢測HTTP請求的URL和請求正文,生成所述當(dāng)前待檢測HTTP請求對應(yīng)的當(dāng)前請求標(biāo)識;判斷所述第一設(shè)置單元設(shè)置的所述請求標(biāo)識列表中是否存在與所述當(dāng)前請求標(biāo)識相同的請求標(biāo)識,如果是,結(jié)束當(dāng)前流程,否則,將所述當(dāng)前請求標(biāo)識添加到所述請求標(biāo)識中,并對所述當(dāng)前待檢測HTTP請求進行SQL注入攻擊檢測。
優(yōu)選地,
所述第一處理單元,進一步用于確定當(dāng)前待檢測HTTP請求的請求正文中包含的每一個參數(shù)的參數(shù)名稱;將所述每一個參數(shù)的參數(shù)名稱,按照預(yù)設(shè)的排序規(guī)則進行排序,生成子請求標(biāo)識;將所述子請求標(biāo)識與所述當(dāng)前待檢測HTTP請求的URL進行合并,生成所述當(dāng)前待檢測HTTP請求的當(dāng)前請求標(biāo)識。
優(yōu)選地,
進一步包括:第二設(shè)置單元,用于設(shè)置至少一個SQL注入關(guān)鍵字;
所述第一處理單元,用于判斷所述當(dāng)前請求標(biāo)識對應(yīng)的請求標(biāo)識相同的待檢測HTTP請求中的一個待檢測HTTP請求中,是否存在任意一個所述第二設(shè)置單元設(shè)置的所述SQL注入關(guān)鍵字,如果是,則認(rèn)定所述當(dāng)前請求標(biāo)識對應(yīng)的請求標(biāo)識相同的待檢測HTTP請求中的一個待檢測HTTP請求存在SQL注入攻擊,否則,則認(rèn)定所述當(dāng)前請求標(biāo)識對應(yīng)的請求標(biāo)識相同的待檢測HTTP請求中的一個待檢測HTTP請求不存在SQL注入攻擊。
優(yōu)選地,
進一步包括:第三設(shè)置單元,用于設(shè)置至少一個無效請求擴展名;
第二獲取單元,用于獲取外部發(fā)來的至少一個待過濾HTTP請求,每個所述待過濾HTTP請求,包括:URL和請求正文;
第二處理單元,用于針對所述第二獲取單元獲取的每個所述待過濾HTTP請求,確定當(dāng)前待過濾HTTP請求的URL中的當(dāng)前擴展名,判斷所述當(dāng)前擴展名是否與任意一個所述第三設(shè)置單元設(shè)置的所述無效請求擴展名相同,如果是,則所述當(dāng)前待過濾HTTP請求為無效請求,結(jié)束當(dāng)前流程,否則,將所述當(dāng)前待過濾HTTP請求作為所述待檢測HTTP請求,添加到所述當(dāng)前組中,觸發(fā)所述第一獲取單元。
本發(fā)明實施例提供了一種SQL注入攻擊檢測方法和裝置,其中,該方法獲取當(dāng)前組中的至少一個HTTP請求,根據(jù)每個待檢測HTTP請求的URL和請求正文,生成每個待檢測HTTP請求對應(yīng)的請求標(biāo)識,針對每個請求標(biāo)識,對當(dāng)前請求標(biāo)識對應(yīng)的請求標(biāo)識相同的待檢測HTTP請求中的一個待檢測HTTP請求,進行SQL注入攻擊檢測。該方法利用URL和請求正文對HTTP請求進行篩選,可以區(qū)分URL相同、請求正文不同的HTTP請求,防止HTTP請求由于URL相同被漏測,進而提高數(shù)據(jù)庫的安全性。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明一個實施例提供的一種SQL注入攻擊檢測方法流程圖;
圖2是本發(fā)明一個實施例提供的另一種SQL注入攻擊檢測方法流程圖;
圖3是本發(fā)明一個實施例提供的一種SQL注入攻擊檢測裝置結(jié)構(gòu)示意圖;
圖4是本發(fā)明一個實施例提供的另一種SQL注入攻擊檢測裝置結(jié)構(gòu)示意圖;
圖5是本發(fā)明一個實施例提供的又一種SQL注入攻擊檢測裝置結(jié)構(gòu)示意圖;
圖6是本發(fā)明一個實施例提供的再一種SQL注入攻擊檢測裝置結(jié)構(gòu)示意圖。
具體實施方式
為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例,基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動的前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
如圖1所示,本發(fā)明實施例提供了一種SQL注入攻擊檢測方法,該方法可以包括以下步驟:
步驟101:獲取當(dāng)前組中的至少一個待檢測HTTP請求,每個待檢測HTTP請求,包括:URL和請求正文;
步驟102:根據(jù)每個待檢測HTTP請求的URL和請求正文,生成每個待檢測HTTP請求對應(yīng)的請求標(biāo)識,針對每個請求標(biāo)識,對當(dāng)前請求標(biāo)識對應(yīng)的請求標(biāo)識相同的待檢測HTTP請求中的一個待檢測HTTP請求,進行SQL注入攻擊檢測。
在圖1所示的實施例中,該方法獲取當(dāng)前組中的至少一個HTTP請求,根據(jù)每個待檢測HTTP請求的URL和請求正文,生成每個待檢測HTTP請求對應(yīng)的請求標(biāo)識,針對每個請求標(biāo)識,對當(dāng)前請求標(biāo)識對應(yīng)的請求標(biāo)識相同的待檢測HTTP請求中的一個待檢測HTTP請求,進行SQL注入攻擊檢測。該方法利用URL和請求正文對HTTP請求進行篩選,可以區(qū)分URL相同、請求正文不同的HTTP請求,防止HTTP請求由于URL相同被漏測,進而提高數(shù)據(jù)庫的安全性。
在本發(fā)明的一個實施例中,為了篩選出重復(fù)的待檢測HTTP請求,該方法還包括:設(shè)置當(dāng)前組對應(yīng)的請求標(biāo)識列表,請求標(biāo)識列表,用于存儲請求標(biāo)識。步驟102還包括:針對每個待檢測HTTP請求,根據(jù)當(dāng)前待檢測HTTP請求的URL和請求正文,生成當(dāng)前待檢測HTTP請求對應(yīng)的當(dāng)前請求標(biāo)識;判斷請求標(biāo)識列表中是否存在與當(dāng)前請求標(biāo)識相同的請求標(biāo)識,如果是,結(jié)束當(dāng)前流程,否則,將當(dāng)前請求標(biāo)識添加到請求標(biāo)識中,并對當(dāng)前待檢測HTTP請求進行SQL注入攻擊檢測。
對于不同的待檢測HTTP請求,可能生成相同的請求標(biāo)識,對于相同的請求標(biāo)志對應(yīng)的多個待檢測HTTP請求,只需對其中的一個待檢測HTTP請求進行SQL注入攻擊檢測。
HTTP請求主要包括:請求方法、URL、協(xié)議/版本;請求頭;請求正文。其中請求方法主要根據(jù)實際配置操作內(nèi)容確定,如獲取規(guī)則表操作,一般為GET,添加、刪除、修改規(guī)則一般為POST;URL中主要由IP、端口、根據(jù)實際配置操作確定的相對路徑組成。請求頭包含許多有關(guān)的客戶端環(huán)境和請求正文的有用信息。請求正文中可以包含客戶提交的參數(shù)信息。利用參數(shù)信息和URL,可以生成請求標(biāo)志。
在本發(fā)明的一個實施例中,為了獲得待檢測HTTP請求對應(yīng)的請求標(biāo)識,根據(jù)當(dāng)前待檢測HTTP請求的URL和請求正文,生成當(dāng)前待檢測HTTP請求對應(yīng)的當(dāng)前請求標(biāo)識,包括:確定當(dāng)前待檢測HTTP請求的請求正文中包含的每一個參數(shù)的參數(shù)名稱;將每一個參數(shù)的參數(shù)名稱,按照預(yù)設(shè)的排序規(guī)則進行排序,生成子請求標(biāo)識;將子請求標(biāo)識與當(dāng)前待檢測HTTP請求的URL進行合并,生成當(dāng)前待檢測HTTP請求的當(dāng)前請求標(biāo)識。
例如,“GET/sample.jsp HTTP/1.1”,“GET”代表請求方法,“/sample.jsp”表示URL,“HTTP/1.1代表協(xié)議和協(xié)議的版本。
例如,username=j(luò)inqiao&password=1234,其中,username和password為參數(shù)名稱,jinqiao和password為參數(shù)值。
預(yù)設(shè)的順序可以為參數(shù)名稱首字母由前到后的順序,例如,a、b、c、d……。也可以按照首字母由后到前的順序,例如,z、y、x……。該順序并不固定,只需要遵循一定的規(guī)則。本實施例中,以首字母由前到后的順序,生成子請求標(biāo)識為passwordusername,將該子請求標(biāo)識與URL“/sample.jsp”合并為“/sample.jsppasswordusername”,即為當(dāng)前請求標(biāo)識。該合并方式可以為“URL子請求標(biāo)識”,也可以為“子請求標(biāo)識URL”。
在本發(fā)明的一個實施例中,為了對待檢測HTTP請求進行SQL注入攻擊檢測,該方法還包括:預(yù)先設(shè)置至少一個SQL注入關(guān)鍵字;對當(dāng)前請求標(biāo)識對應(yīng)的請求標(biāo)識相同的待檢測HTTP請求中的一個待檢測HTTP請求,進行SQL注入攻擊檢測,包括:判斷當(dāng)前請求標(biāo)識對應(yīng)的請求標(biāo)識相同的待檢測HTTP請求中的一個待檢測HTTP請求中,是否存在任意一個SQL注入關(guān)鍵字,如果是,則認(rèn)定當(dāng)前請求標(biāo)識對應(yīng)的請求標(biāo)識相同的待檢測HTTP請求中的一個待檢測HTTP請求存在SQL注入攻擊,否則,則認(rèn)定當(dāng)前請求標(biāo)識對應(yīng)的請求標(biāo)識相同的待檢測HTTP請求中的一個待檢測HTTP請求不存在SQL注入攻擊。
SQL注入攻擊檢測的方法多種多樣,本實施例僅提供其中一種,即利用SQL注入關(guān)鍵字。SQL注入關(guān)鍵字的數(shù)量和類型并不固定。例如,預(yù)先設(shè)置一個SQL注入關(guān)鍵字“1=1”,判斷待檢測HTTP請求中是否存在“1=1”,如果存在,則待檢測HTTP請求存在SQL注入攻擊,否則,待檢測HTTP請求不存在SQL注入攻擊。再例如,預(yù)先設(shè)置兩個SQL注入關(guān)鍵字“1=1”、“1=2”,判斷待檢測HTTP請求中是否存在“1=1”和“1=2”中任意一個,如果存在則待檢測HTTP請求存在SQL注入攻擊,否則,待檢測HTTP請求不存在SQL注入攻擊。
在本發(fā)明的一個實施例中,為了過濾掉無效的HTTP請求,提高SQL注入攻擊檢測的效率,該方法還包括:預(yù)先設(shè)置至少一個無效請求擴展名;在步驟101之前,還包括:獲取外部發(fā)來的至少一個待過濾HTTP請求,每個待過濾HTTP請求,包括:URL和請求正文;
針對每個待過濾HTTP請求,確定當(dāng)前待過濾HTTP請求的URL中的當(dāng)前擴展名,判斷當(dāng)前擴展名是否與任意一個無效請求擴展名相同,如果是,則當(dāng)前待過濾HTTP請求為無效請求,結(jié)束當(dāng)前流程,否則,將當(dāng)前待過濾HTTP請求作為待檢測HTTP請求,添加到當(dāng)前組中,執(zhí)行步驟101。
該無效請求擴展名可以根據(jù)實際需求進行設(shè)置,例如,JavaScript腳本,圖片,文本等。當(dāng)前待過濾HTTP請求中存在無效請求擴展名中,則為無效請求,否則,將當(dāng)前待過濾HTTP請求添加到包含待檢測HTTP請求的當(dāng)前組中。
如圖2所示,本發(fā)明實施例以當(dāng)前組中存在四個待過濾HTTP請求為例,對SQL注入攻擊檢測方法進行詳細(xì)地說明,該方法包括:
步驟201:預(yù)先設(shè)置一個SQL注入關(guān)鍵字,一個無效請求擴展名。
SQL注入關(guān)鍵字,用于判斷待檢測HTTP請求是否存在SQL注入攻擊;無效請求擴展名,用于過濾掉無效的待過濾HTTP請求。
在本實施例中,SQL注入關(guān)鍵字為“1=1”;無效請求擴展名為“jsp”。
步驟202:獲取外部發(fā)來的四個待過濾HTTP請求,每個待過濾HTTP請求,包括:URL和請求正文。
接收外部發(fā)來的四個待過濾HTTP請求,包括:
待過濾HTTP請求A:
URL:“/index.php”,
請求正文:username=aa&password=1234;
待過濾HTTP請求B:
URL:“/index.jsp”,
請求正文:username=aa&age=12;
待過濾HTTP請求C:
URL:“/index.php”,
請求正文:username=aa&age=201=1;
待過濾HTTP請求D:
URL:“/index.php”,
請求正文:username=aa&password=12;
步驟203:針對每個待過濾HTTP請求,確定待過濾HTTP請求的URL中的當(dāng)前擴展名,判斷當(dāng)前擴展名是否與無效請求擴展名相同,如果是,執(zhí)行步驟204,否則,執(zhí)行步驟205。
針對待過濾HTTP請求A,當(dāng)前擴展名為“php”,與無效請求擴展名“jsp”不同,執(zhí)行步驟205;
針對待過濾HTTP請求B,當(dāng)前擴展名為“jsp”,與無效請求擴展名“jsp”相同,執(zhí)行步驟204;
針對待過濾HTTP請求C,當(dāng)前擴展名為“php”,與無效請求擴展名“jsp”不同,執(zhí)行步驟205;
針對待過濾HTTP請求D,當(dāng)前擴展名為“php”,與無效請求擴展名“jsp”不同,執(zhí)行步驟205。
步驟204:待過濾HTTP請求為無效請求,結(jié)束當(dāng)前流程。
待過濾HTTP請求B為無效請求,結(jié)束當(dāng)前流程。
步驟205:將待過濾HTTP請求作為待檢測HTTP請求,添加到當(dāng)前組中,執(zhí)行步驟206。
將待過濾HTTP請求A、C、D作為待檢測HTTP請求,添加到當(dāng)前組中,執(zhí)行步驟206。
步驟206:獲取當(dāng)前組中的待檢測HTTP請求,待檢測HTTP請求,包括:URL和請求正文。
獲取當(dāng)前組中的待檢測HTTP請求A、C、D。
步驟207:設(shè)置當(dāng)前組對應(yīng)的請求標(biāo)識列表,請求標(biāo)識列表,用于存儲請求標(biāo)識。
設(shè)置當(dāng)前組對應(yīng)的請求標(biāo)識列表,用于存儲請求標(biāo)識。
步驟208:針對每個待檢測HTTP請求,確定待檢測HTTP請求的請求正文中包含的每一個參數(shù)的參數(shù)名稱。
針對待檢測HTTP請求A、D,請求正文中包含兩個參數(shù),參數(shù)名稱分別為“username”、“password”;
針對待檢測HTTP請求C,請求正文中包含兩個參數(shù),參數(shù)名稱分別為“username”、“age”。
步驟209:將每一個參數(shù)的參數(shù)名稱,按照預(yù)設(shè)的排序規(guī)則進行排序,生成子請求標(biāo)識。
將參數(shù)名稱按照首字母的順序進行排列,針對待檢測HTTP請求A、D,生成子請求標(biāo)識“passwordusername”;針對待檢測HTTP請求C,生成子請求標(biāo)識“ageusername”
步驟210:將子請求標(biāo)識與待檢測HTTP請求的URL進行合并,生成待檢測HTTP請求的當(dāng)前請求標(biāo)識。
針對待檢測HTTP請求A、D,將子請求標(biāo)識“passwordusername”與URL“/index.php”合并,其中,URL在前,則當(dāng)前請求標(biāo)識為“/index.phppasswordusername”。
針對待檢測HTTP請求C,當(dāng)前請求標(biāo)識為“/index.phpageusername”
步驟211:判斷請求標(biāo)識列表中是否存在與當(dāng)前請求標(biāo)識相同的請求標(biāo)識,如果是,執(zhí)行步驟212,否則,執(zhí)行步驟213。
針對待檢測HTTP請求A、C和D,分別進行判斷,例如,先對待檢測HTTP請求A對應(yīng)的當(dāng)前請求標(biāo)識“/index.phppasswordusername”進行判斷,請求標(biāo)識列表中此時為空,不存在與當(dāng)前請求標(biāo)識相同的請求標(biāo)識,執(zhí)行步驟213;
針對待檢測HTTP請求C對應(yīng)的當(dāng)前請求標(biāo)識“/index.phpageusername”,請求標(biāo)識列表中不存在與當(dāng)前請求標(biāo)識相同的請求標(biāo)識,執(zhí)行步驟213;
針對待檢測HTTP請求D對應(yīng)的當(dāng)前請求標(biāo)識“/index.phppasswordusername”,請求標(biāo)識列表中已存在與當(dāng)前請求標(biāo)識相同的請求標(biāo)識,執(zhí)行步驟212。
步驟212:結(jié)束當(dāng)前流程。
步驟213:將當(dāng)前請求標(biāo)識添加到請求標(biāo)識列表中。
將“/index.phppasswordusername”添加到請求標(biāo)識列表中;將“/index.phpageusername”添加到請求標(biāo)識列表中,執(zhí)行步驟214。
步驟214:判斷待檢測HTTP請求中是否存在SQL注入關(guān)鍵字,如果是,執(zhí)行步驟215,否則,執(zhí)行步驟216。
待檢測HTTP請求A中不存在SQL注入關(guān)鍵字“1=1”,執(zhí)行步驟216。待檢測HTTP請求C中存在SQL注入關(guān)鍵字“1=1”,執(zhí)行步驟215。
步驟215:認(rèn)定待檢測HTTP請求存在SQL注入攻擊。
當(dāng)前待檢測HTTP請求C存在SQL注入攻擊。
步驟216:認(rèn)定待檢測HTTP請求不存在SQL注入攻擊。
當(dāng)前待檢測HTTP請求A不存在SQL注入攻擊。
如圖3所示,本發(fā)明實施例提供了一種SQL注入攻擊檢測裝置,包括:
第一獲取單元301,用于獲取當(dāng)前組中的至少一個待檢測HTTP請求,每個待檢測HTTP請求,包括:URL和請求正文;
第一處理單元302,用于根據(jù)第一獲取單元301獲取的每個待檢測HTTP請求的URL和請求正文,生成每個待檢測HTTP請求對應(yīng)的請求標(biāo)識,針對每個請求標(biāo)識,對當(dāng)前請求標(biāo)識對應(yīng)的請求標(biāo)識相同的待檢測HTTP請求中的一個待檢測HTTP請求,進行SQL注入攻擊檢測。
在本發(fā)明的一個實施例中,如圖4所示,第一設(shè)置單元303,用于設(shè)置當(dāng)前組對應(yīng)的請求標(biāo)識列表,請求標(biāo)識列表,用于存儲請求標(biāo)識;
第一處理單元302,用于針對每個待檢測HTTP請求,根據(jù)當(dāng)前待檢測HTTP請求的URL和請求正文,生成當(dāng)前待檢測HTTP請求對應(yīng)的當(dāng)前請求標(biāo)識;判斷第一設(shè)置單元303設(shè)置的請求標(biāo)識列表中是否存在與當(dāng)前請求標(biāo)識相同的請求標(biāo)識,如果是,結(jié)束當(dāng)前流程,否則,將當(dāng)前請求標(biāo)識添加到請求標(biāo)識中,并對當(dāng)前待檢測HTTP請求進行SQL注入攻擊檢測。
在本發(fā)明的一個實施例中,第一處理單元302,進一步用于確定當(dāng)前待檢測HTTP請求的請求正文中包含的每一個參數(shù)的參數(shù)名稱;將每一個參數(shù)的參數(shù)名稱,按照預(yù)設(shè)的排序規(guī)則進行排序,生成子請求標(biāo)識;將子請求標(biāo)識與當(dāng)前待檢測HTTP請求的URL進行合并,生成當(dāng)前待檢測HTTP請求的當(dāng)前請求標(biāo)識。
在本發(fā)明的一個實施例中,如圖5所示,該SQL注入攻擊檢測裝置,還包括:第二設(shè)置單元304,用于設(shè)置至少一個SQL注入關(guān)鍵字;
第一處理單元302,用于判斷當(dāng)前請求標(biāo)識對應(yīng)的請求標(biāo)識相同的待檢測HTTP請求中的一個待檢測HTTP請求中,是否存在任意一個第二設(shè)置單元304設(shè)置的SQL注入關(guān)鍵字,如果是,則認(rèn)定當(dāng)前請求標(biāo)識對應(yīng)的請求標(biāo)識相同的待檢測HTTP請求中的一個待檢測HTTP請求存在SQL注入攻擊,否則,則認(rèn)定當(dāng)前請求標(biāo)識對應(yīng)的請求標(biāo)識相同的待檢測HTTP請求中的一個待檢測HTTP請求不存在SQL注入攻擊。
在本發(fā)明的一個實施例中,如圖6所示,該SQL注入攻擊檢測裝置,還包括:第三設(shè)置單元305,用于設(shè)置至少一個無效請求擴展名;
第二獲取單元306,用于獲取外部發(fā)來的至少一個待過濾HTTP請求,每個待過濾HTTP請求,包括:URL和請求正文;
第二處理單元307,用于針對第二獲取單元獲取的每個待過濾HTTP請求,確定當(dāng)前待過濾HTTP請求的URL中的當(dāng)前擴展名,判斷當(dāng)前擴展名是否與任意一個第三設(shè)置單元設(shè)置的無效請求擴展名相同,如果是,則當(dāng)前待過濾HTTP請求為無效請求,結(jié)束當(dāng)前流程,否則,將當(dāng)前待過濾HTTP請求作為待檢測HTTP請求,添加到當(dāng)前組中,觸發(fā)第一獲取單元。
綜上,本發(fā)明各個實施例至少具有如下效果:
1、在本發(fā)明實施例中,該方法獲取當(dāng)前組中的至少一個HTTP請求,根據(jù)每個待檢測HTTP請求的URL和請求正文,生成每個待檢測HTTP請求對應(yīng)的請求標(biāo)識,針對每個請求標(biāo)識,對當(dāng)前請求標(biāo)識對應(yīng)的請求標(biāo)識相同的待檢測HTTP請求中的一個待檢測HTTP請求,進行SQL注入攻擊檢測。該方法利用URL和請求正文對HTTP請求進行篩選,可以區(qū)分URL相同、請求正文不同的HTTP請求,防止HTTP請求由于URL相同被漏測,進而提高數(shù)據(jù)庫的安全性。
2、在本發(fā)明實施例中,提供了一種根據(jù)URL和請求正文的參數(shù)名稱,生成請求標(biāo)識的方法。通過該請求標(biāo)識可以對待檢測HTTP請求進行篩選,過濾掉重復(fù)的待檢測HTTP請求,并且防止漏測情況的發(fā)生。
3、在本發(fā)明實施例中,提供了一種SQL注入攻擊檢測的方法,通過判斷待檢測HTTP請求中是否存在預(yù)設(shè)的SQL注入關(guān)鍵字,確定待檢測HTTP請求是否存在SQL注入攻擊,該方法操作簡單,檢測效率高。
4、在本發(fā)明實施例中,通過設(shè)置無效請求擴展名,對待過濾HTTP請求進行過濾,剔除無效的待過濾HTTP請求,確定待檢測HTTP請求,該方法可以提高SQL注入攻擊檢測的效率。
上述裝置內(nèi)的各單元之間的信息交互、執(zhí)行過程等內(nèi)容,由于與本發(fā)明方法實施例基于同一構(gòu)思,具體內(nèi)容可參見本發(fā)明方法實施例中的敘述,此處不再贅述。
需要說明的是,在本文中,諸如第一和第二之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個〃·····”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同因素。
最后需要說明的是:以上所述僅為本發(fā)明的較佳實施例,僅用于說明本發(fā)明的技術(shù)方案,并非用于限定本發(fā)明的保護范圍。凡在本發(fā)明的精神和原則之內(nèi)所做的任何修改、等同替換、改進等,均包含在本發(fā)明的保護范圍內(nèi)。