本發(fā)明涉及網絡應用安全
技術領域:
:,尤指一種結構化查詢語言sql注入攻擊的檢測方法和裝置。
背景技術:
::目前,隨著網絡技術的迅速發(fā)展,越來越多的應用業(yè)務都采用網絡(web)的方式來對外提供交互和服務,然而大部分應用業(yè)務在使用時很容易受到安全威脅,其中,最常見的安全威脅是結構化查詢語言(structuredquerylanguage,簡稱:sql)注入攻擊,會造成敏感數(shù)據(jù)泄露、木馬植入等后果,從而危害很大。現(xiàn)有技術中,大部分廠商通常檢測sql注入的方法主要是基于特征檢測,該特征檢測方法是指在web請求頭的各個參數(shù)中檢查是否含有sql語句關鍵字,例如select,union,where等等,如果出現(xiàn)關鍵字則報警;還有個別廠商會采用語法檢測,因為構成有效的sql注入,其中,參數(shù)部分必須是完整sql語句的一部分,所以可以通過語法檢查來判斷是不是完整的sql語句;另外,還有廠商會在了解web服務器源碼情況下,通過將源碼中sql語句的用戶輸入部分替換成變量形成sql語句模板,作為后續(xù)sql注入檢測基礎。但是,基于特征檢測方法,如果sql語法的關鍵字也往往是自然語言的詞匯,在正常的web交互中,有一定概率出現(xiàn)上述關鍵字,這樣會導致檢測誤判;采用語法檢測方式的精度雖然比特征檢測好很多,但一些比較簡單的參數(shù)可能會命中語法,造成誤報;另外,第三種檢測方式的局限性則在于需要了解web服務器上每個涉及sql語句提交的源碼片段,并且需要針對性設置,普適性比較差。因此,綜上所述,現(xiàn)有技術的檢測sql注入的方法精度低或普適性差。技術實現(xiàn)要素:為了解決上述技術問題,本發(fā)明提供了一種結構化查詢語言sql注入攻擊的檢測方法和裝置,基于java虛擬機環(huán)境的網頁應用系統(tǒng)服務器,能夠精確檢測sql注入,從而保證了網絡應用的業(yè)務訪問安全。第一方面,本發(fā)明實施例提供一種結構化查詢語言sql注入攻擊的檢測方法,基于java虛擬機環(huán)境的網頁應用系統(tǒng)服務器,所述方法包括:獲取業(yè)務請求信息和對應的數(shù)據(jù)庫事件信息,其中,所述業(yè)務請求信息包括統(tǒng)一資源定位符url及參數(shù)信息,所述數(shù)據(jù)庫事件信息包括根據(jù)所述業(yè)務請求信息向數(shù)據(jù)庫請求數(shù)據(jù)時所觸發(fā)的sql語句,并將所述業(yè)務請求信息和所述sql語句進行關聯(lián);根據(jù)所述sql語句構建sql語法樹;自學習所述url識別出有效參數(shù)信息,自學習后建立所述url及有效參數(shù)信息所屬的業(yè)務請求信息和所關聯(lián)的sql語句的sql語法樹的關系模型;檢查后續(xù)業(yè)務請求信息和所關聯(lián)的sql語句的sql語法樹的關系,當檢查結果和所述關系模型不一致時,則確認檢測到sql注入攻擊。第二方面,本發(fā)明實施例提供一種結構化查詢語言sql注入攻擊的檢測裝置,基于java虛擬機環(huán)境的網頁應用系統(tǒng)服務器,所述裝置包括:插件關聯(lián)模塊、解析模塊、自學習模塊和檢測模塊;所述插件關聯(lián)模塊,用于獲取業(yè)務請求信息和對應的數(shù)據(jù)庫事件信息,其中,所述業(yè)務請求信息包括統(tǒng)一資源定位符url及參數(shù)信息,所述數(shù)據(jù)庫事件信息包括根據(jù)所述業(yè)務請求信息向數(shù)據(jù)庫請求數(shù)據(jù)時所觸發(fā)的sql語句,并將所述業(yè)務請求信息和所述sql語句進行關聯(lián);所述解析模塊,用于根據(jù)所述sql語句構建sql語法樹;所述自學習模塊,用于自學習所述url識別出有效參數(shù)信息,自學習后建立所述url及有效參數(shù)信息所屬的業(yè)務請求信息和所關聯(lián)的sql語句的sql語法樹的關系模型;所述檢測模塊,用于檢查后續(xù)業(yè)務請求信息和所關聯(lián)的sql語句的sql 語法樹的關系,當檢查結果和所述關系模型不一致時,則確認檢測到sql注入攻擊。本發(fā)明提供的一種結構化查詢語言sql注入攻擊的檢測方法和裝置,基于java虛擬機環(huán)境的網頁應用系統(tǒng)服務器,通過對客戶端的業(yè)務請求信息和所觸發(fā)的sql語句進行關聯(lián),并對所述sql語句進行語法分析構建sql語法樹,自學習所述url識別出有效參數(shù)信息,在自學習后建立所述url及有效參數(shù)信息和所屬的業(yè)務請求信息所關聯(lián)的sql語句的sql語法樹的關系模型,將該關系模型做為檢查基準,對后續(xù)的業(yè)務請求信息和所關聯(lián)的sql語句的sql語法樹的關系與該基準進行檢查,如果檢查結果不一致,確認檢測到sql注入攻擊,則拒絕業(yè)務訪問,從而能夠精確檢測sql注入的威脅,從而保證了網絡應用的業(yè)務訪問安全。本發(fā)明的其它特征和優(yōu)點將在隨后的說明書中闡述,并且,部分地從說明書中變得顯而易見,或者通過實施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點可通過在說明書、權利要求書以及附圖中所特別指出的結構來實現(xiàn)和獲得。附圖說明附圖用來提供對本發(fā)明技術方案的進一步理解,并且構成說明書的一部分,與本申請的實施例一起用于解釋本發(fā)明的技術方案,并不構成對本發(fā)明技術方案的限制。圖1為本發(fā)明提供的一種結構化查詢語言sql注入攻擊的檢測方法實施例一的流程示意圖;圖2為本發(fā)明提供的一種結構化查詢語言sql注入攻擊的檢測方法實施例一的sql語法結構樹示意圖;圖3為本發(fā)明提供的一種結構化查詢語言sql注入攻擊的檢測裝置實施例一的結構示意圖。具體實施方式為使本發(fā)明的目的、技術方案和優(yōu)點更加清楚明白,下文中將結合附圖對本發(fā)明的實施例進行詳細說明。需要說明的是,在不沖突的情況下,本申 請中的實施例及實施例中的特征可以相互任意組合。在附圖的流程圖示出的步驟可以在諸如一組計算機可執(zhí)行指令的計算機系統(tǒng)中執(zhí)行。并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。本發(fā)明實施例涉及的基于java虛擬機環(huán)境的網頁應用系統(tǒng)服務器,可以為部署了網頁應用和網頁應用的資源的服務器,用于檢測網頁應用系統(tǒng)抗sql注入攻擊的能力,但并不以此為限。本發(fā)明實施例涉及的數(shù)據(jù)庫可以部署在上述網頁應用系統(tǒng)服務器上,還可以部署在與上述網頁應用系統(tǒng)服務器不同的其他服務器上,只要能與上述網頁應用系統(tǒng)服務器進行交互即可。本發(fā)明實施例涉及的終端,可以是例如:移動終端、測試設備、計算機等,用于發(fā)送業(yè)務請求信息的,但并不以此為限。本發(fā)明實施例涉及的方法,旨在解決現(xiàn)有技術中的檢測sql注入的方法精度低或普適性差的技術問題。下面以具體地實施例對本發(fā)明的技術方案進行詳細說明。下面這幾個具體的實施例可以相互結合,對于相同或相似的概念或過程可能在某些實施例不再贅述。圖1為本發(fā)明提供的一種結構化查詢語言sql注入攻擊的檢測方法實施例一的流程示意圖,本實施例涉及的是如何進行結構化查詢語言sql注入攻擊檢測的具體過程。如圖1所示,基于java虛擬機環(huán)境的網頁應用系統(tǒng)服務器,該方法包括:s101、獲取業(yè)務請求信息和對應的數(shù)據(jù)庫事件信息,其中,所述業(yè)務請求信息包括統(tǒng)一資源定位符url及參數(shù)信息,所述數(shù)據(jù)庫事件信息包括根據(jù)所述業(yè)務請求信息向數(shù)據(jù)庫請求數(shù)據(jù)時所觸發(fā)的sql語句,并將所述業(yè)務請求信息和所述sql語句進行關聯(lián)。具體的,終端向網頁應用系統(tǒng)服務器發(fā)送業(yè)務請求信息,該業(yè)務可以為某個網頁應用,該網頁應用可以是網易郵箱、網上銀行、淘寶購物等應用,該網頁應用系統(tǒng)服務器在接收到業(yè)務請求信息,即進行http請求時,獲取網 頁應用統(tǒng)一資源定位符(uniformresourcelocator,簡稱:url)及參數(shù)信息;并且,該網頁應用系統(tǒng)服務器在向數(shù)據(jù)庫請求數(shù)據(jù)時,獲取業(yè)務請求信息所觸發(fā)的對應的sql語句,其中,通過在網頁應用服務器上部署插件關聯(lián)模塊,使得該插件關聯(lián)模塊可以在處理該業(yè)務請求的類中加入統(tǒng)一資源定位符(uniformresourcelocator,簡稱:url)探針,在處理sql語句的類中加入sql探針,這樣在網頁應用系統(tǒng)服務器在向數(shù)據(jù)庫請求時,在相應的sql語句請求中攜帶上對應的url信息,建立起網頁應用訪問url和對應sql語句的關聯(lián)關系;在上述插件關聯(lián)模塊中的攔截代碼可以采用java字節(jié)碼操作技術,直接在相關類加載的時候進行字節(jié)碼操作,并采用java模式中的代理模式從而達到獲取url及參數(shù)信息和sql語句信息,并將所述業(yè)務的url及參數(shù)信息和所對應的觸發(fā)的sql語句進行關聯(lián)。s102、根據(jù)所述sql語句構建sql語法樹。具體的,圖2為本發(fā)明提供的一種結構化查詢語言sql注入攻擊的檢測方法實施例一的sql語法樹示意圖,該網頁應用系統(tǒng)服務器在獲得http請求所對應的數(shù)據(jù)庫查詢sql語句信息后,對sql語句做語法分析,即對該sql語句的標識符、數(shù)據(jù)類型、函數(shù)、表達式、運算符、保留關鍵字等語法元素進行分析,從而構建sql語法樹,例如業(yè)務請求信息對應的sql語句如下:“selectnamefromtable_awherepass=ppppp”如圖2所示,該sql語法樹為對上述sql語句進行語法分析所構建sql語法樹。s103、自學習所述url識別出有效參數(shù)信息,自學習后建立所述url及有效參數(shù)信息所屬的業(yè)務請求信息和所關聯(lián)的sql語句的sql語法樹的關系模型。具體的,通過將業(yè)務請求信息和對應的數(shù)據(jù)庫事件信息中的sql語句進行關聯(lián)后,其中,業(yè)務請求信息的參數(shù)信息具有多樣性,例如:張三登錄網易郵箱,李四登錄網易郵箱,這些都是登錄網易郵箱的業(yè)務請求,僅僅是賬戶的參數(shù)信息不同,“張三”、“李四”這樣的參數(shù)信息是不會影響上述“登錄網易郵箱”的業(yè)務請求和所關聯(lián)的數(shù)據(jù)庫事件信息中的sql語句的對應關 系,采用自學習url,對參數(shù)信息進行分類,可以分為無效參數(shù)信息和有效參數(shù)信息,繼續(xù)上述實施例“張三”、“李四”即為無效參數(shù)信息,而對于“賬戶”是有效參數(shù)信息,識別出有效參數(shù)信息,即識別出對所屬的業(yè)務請求信息所關聯(lián)的sql語句的sql語法樹有影響的有效參數(shù)信息,從而在自學習后建立所述url及有效參數(shù)信息所屬的業(yè)務請求信息和所關聯(lián)的sql語句的sql語法樹信息的關系模型,并通過對每個url的粒度進行控制,從而使得可以在較短的時間內盡快完成業(yè)務請求信息中頻率高的url的自學習,而對于請求業(yè)務信息頻率低的url的自學習則可以保證學習的樣本數(shù)量足夠多,以便快速建立業(yè)務請求信息和sql語法樹的關系模型。s104、檢查后續(xù)業(yè)務請求信息和所關聯(lián)的sql語句的sql語法樹的關系,當檢查結果和所述關系模型不一致時,則確認檢測到sql注入攻擊。具體的,按照自學習后所建立的關系模型來作為檢查基準,檢查后續(xù)業(yè)務請求信息和所關聯(lián)的sql語句的sql語法樹的關系,檢查與自學習后所建立的關系模型是否一致,如果不一致,則確定檢測到為sql注入攻擊,并將檢查結果輸出。本發(fā)明實施例提供的一種結構化查詢語言sql注入攻擊的檢測方法,應用于基于java虛擬機環(huán)境的網頁應用系統(tǒng)服務器,通過對客戶端的業(yè)務請求信息中的url及參數(shù)信息和所觸發(fā)的sql語句進行關聯(lián),并對所述sql語句進行語法分析構建sql語法樹,自學習所述url識別出有效參數(shù)信息,在自學習后建立所述url及有效參數(shù)信息所屬的業(yè)務請求信息和所關聯(lián)的sql語句的sql語法樹的關系模型,將該關系模型做為檢查基準,對后續(xù)的業(yè)務請求信息和所關聯(lián)的sql語句的sql語法樹的關系與該基準進行檢查,如果檢查結果不一致,則拒絕業(yè)務訪問,從而能夠精確檢測sql注入的威脅,從而保證了網絡應用的業(yè)務安全。進一步地,在上述實施例的基礎上,還包括:當檢查結果和所述關系模型一致時,則允許進行業(yè)務訪問。具體的,按照自學習所建立的關系模型來作為檢查基準,檢查后續(xù)業(yè)務請求信息和所關聯(lián)的sql語句的sql語法樹的關系和自學習建立的關系模型是否一致,如果一致則認為是正常的業(yè)務訪問,允許進行業(yè)務訪問。因為sql注入攻擊實質上是利用構建攻擊向量來改變業(yè)務相關的sql語句語義,所以要形成有效sql注入攻擊,所關聯(lián)的sql語句的sql語法樹結構和正常的語法樹結構相比,必然發(fā)生變化,從而通過確定業(yè)務請求信息和sql語句的sql語法樹的關系的一致性,進而保證了sql注入攻擊都能被該方法精確檢測出來。進一步地,在上述實施例的基礎上,上述步驟103中所述采用自學習所述url識別出有效參數(shù)信息,包括:根據(jù)所述url預設自學習的閾值,并按照閾值設定的學習次數(shù)自學習所述url,識別出影響所屬的業(yè)務請求信息和所關聯(lián)的sql語句的sql語法樹的對應關系的有效參數(shù)信息。具體的,根據(jù)url的不同可以預設自學習的閾值,即可以設定統(tǒng)一的學習次數(shù),例如是5次,也可以根據(jù)不同的url設定不同的學習次數(shù),例如url1可以是3次,url2可以是4次,具體可以根據(jù)實際需求來進行預設,一旦預設自學習的學習次數(shù)后,則按照設定學習次數(shù)來自學習url,對參數(shù)信息進行分類,其中,該參數(shù)信息可以分為無效參數(shù)和有效參數(shù),識別出所屬的業(yè)務請求信息和所關聯(lián)的sql語句的sql語法樹對應關系有影響的有效參數(shù)信息,剔除對所屬的業(yè)務請求信息和所關聯(lián)的sql語句的sql語法樹對應關系無影響的無效參數(shù),從而在自學習后建立所述url及有效參數(shù)信息所屬的業(yè)務請求信息和所關聯(lián)的sql語句的sql語法樹的關系模型。通過預設自學習的閾值來對每個url及參數(shù)信息的粒度進行控制,從而使得可以在較短的時間內盡快完成業(yè)務請求信息中頻率高的url的自學習,而對于請求業(yè)務信息頻率低的url的自學習則可以保證學習的樣本數(shù)量足夠多,以便快速建立業(yè)務請求信息和sql語法樹的關系模型。進一步地,在上述實施例的基礎上,所述自學習所述url識別出有效參數(shù)信息,還包括:若確定所述url按照設定的學習次數(shù)完成自學習時,則停止所述url的自學習。具體的,在所述自學習所述url識別出有效參數(shù)信息的過程中,會確定該url自學習的狀態(tài),若確定該url按照設定的學習次數(shù)完成自學習時,即當相同url訪問預定的學習次數(shù)以后,則停止所述url的自學習,直接 將該關系模型作為檢查的基準,這樣可以不用一直都對業(yè)務請求信息中的url進行自學習,尤其是使用頻率高的業(yè)務請求信息,從而提高了網頁應用的效率。進一步地,在上述實施例的基礎上,所述自學習所述url識別出有效參數(shù)信息,還包括:若確定所述url未按照設定的學習次數(shù)完成自學習時,則對已識別出影響所屬的業(yè)務請求信息和所關聯(lián)的sql語句的sql語法樹的對應關系的有效參數(shù)信息進行存儲,直至確定按照設定的學習次數(shù)完成自學習時,則停止所述url的自學習。具體的,在所述自學習所述url識別出有效參數(shù)信息的過程中,會確定所述url自學習的狀態(tài),若未按照設定的學習次數(shù)完成自學習時,則對已識別出影響所屬的業(yè)務請求信息和所關聯(lián)的sql語句的語法樹的對應關系的有效參數(shù)信息進行存儲,在存儲后允許業(yè)務進行訪問,然后直至確定按照設定的學習次數(shù)完成完成自學習時,則停止所述url的自學習,這樣通過確定所述url自學習的狀態(tài),從而避免重復構建關系模型基準,提高了網頁應用的效率。進一步地,圖3為一種結構化查詢語言sql注入攻擊的檢測裝置實施例一的結構示意圖,如圖3所示,該裝置包括:插件關聯(lián)模塊10、解析模塊20、自學習模塊30和檢測模塊40;所述插件關聯(lián)模塊10,用于獲取業(yè)務請求信息和對應的數(shù)據(jù)庫事件信息,其中,所述業(yè)務請求信息包括統(tǒng)一資源定位符url及參數(shù)信息,所述數(shù)據(jù)庫事件信息包括根據(jù)所述業(yè)務請求信息向數(shù)據(jù)庫請求數(shù)據(jù)時所觸發(fā)的sql語句,并將所述業(yè)務請求信息和所述sql語句進行關聯(lián);所述解析模塊20,用于根據(jù)所述sql語句構建sql語法樹;所述自學習模塊30,用于自學習所述url識別出有效參數(shù)信息,自學習后建立所述url及有效參數(shù)信息所屬的業(yè)務請求信息和所關聯(lián)的sql語句的sql語法樹的關系模型;所述檢測模塊40,用于檢查后續(xù)業(yè)務請求信息和所關聯(lián)的sql語句的sql語法樹的關系,當檢查結果和所述關系模型不一致時,則確認檢測到sql注入攻擊。本發(fā)明實施例提供的一種結構化查詢語言sql注入攻擊的檢測裝置,基于java虛擬機環(huán)境的網頁應用系統(tǒng)服務器,包括:插件關聯(lián)模塊10、解析模塊20、自學習模塊30和檢測模塊40,通過對客戶端的業(yè)務請求信息中的url及參數(shù)信息和所觸發(fā)的sql語句進行關聯(lián),并對所述sql語句進行語法分析構建sql語法樹,自學習所述url識別出有效參數(shù)信息,在自學習后建立所述url及有效參數(shù)信息所屬的業(yè)務請求信息和所關聯(lián)的sql語句的sql語法樹的關系模型,將該關系模型做為檢查基準,對后續(xù)的業(yè)務請求信息和所關聯(lián)的sql語句的sql語法樹的關系與該基準進行檢查,如果檢查結果不一致,確認檢測到sql注入攻擊,則拒絕業(yè)務訪問,從而能夠精確檢測sql注入的威脅,從而保證了網絡應用的業(yè)務訪問安全。進一步地,在上述實施例的基礎上,所述檢測模塊40還用于:當檢查結果和所述關系模型一致時,則允許進行業(yè)務訪問。本發(fā)明實施例提供的裝置,可以執(zhí)行上述方法實施例,其實現(xiàn)原理和技術效果類似,在此不再贅述。進一步地,在上述實施例的基礎上,所述自學習模塊30用于采用自學習所述url識別出有效參數(shù)信息,包括:所述自學習模塊30用于根據(jù)所述url預設自學習的閾值,并按照閾值設定的學習次數(shù)自學習所述url,識別出影響所屬的業(yè)務請求信息和所關聯(lián)的sql語句的sql語法樹的對應關系的有效參數(shù)信息。本發(fā)明實施例提供的裝置,可以執(zhí)行上述方法實施例,其實現(xiàn)原理和技術效果類似,在此不再贅述。進一步地,在上述實施例的基礎上,所述自學習模塊30還用于若確定按照所述設定的學習次數(shù)完成自學習時,則停止所述url的自學習。本發(fā)明實施例提供的裝置,可以執(zhí)行上述方法實施例,其實現(xiàn)原理和技術效果類似,在此不再贅述。進一步地,在上述實施例的基礎上,所述自學習模塊30還用于若確定所述url未按照設定的學習次數(shù)完成自學習時,則對已識別出影響所屬的業(yè)務請求信息和所關聯(lián)的sql語句的sql語法樹的對應關系的有效參數(shù)信息進 行存儲,直至確定按照設定的學習次數(shù)完成自學習時,則停止所述url的自學習。本發(fā)明實施例提供的裝置,可以執(zhí)行上述方法實施例,其實現(xiàn)原理和技術效果類似,在此不再贅述。雖然本發(fā)明所揭露的實施方式如上,但所述的內容僅為便于理解本發(fā)明而采用的實施方式,并非用以限定本發(fā)明。任何本發(fā)明所屬領域內的技術人員,在不脫離本發(fā)明所揭露的精神和范圍的前提下,可以在實施的形式及細節(jié)上進行任何的修改與變化,但本發(fā)明的專利保護范圍,仍須以所附的權利要求書所界定的范圍為準。當前第1頁12當前第1頁12