本發明涉及計算機網絡信息安全防護領域,特別涉及一種改進的SQL注入防御的方法和系統。
背景技術:隨著Web應用以及瀏覽器/服務器(B/S)模式應用的普及,Web應用程序的安全性問題也日益受到關注。SQL注入攻擊是最為常見的Web應用程序攻擊技術,SQL注入攻擊所帶來的安全破壞也是不可彌補的。所謂SQL注入式攻擊,就是攻擊者把SQL命令插入到Web表單的輸入域或頁面請求的查詢字符串,欺騙服務器執行惡意的SQL命令。在某些表單中,用戶輸入的內容直接用來構造或者影響動態SQL命令,或作為存儲過程的輸入參數,這類表單特別容易受到SQL注入式攻擊。SQL注入可以分為平臺層注入和代碼層注入。前者由不安全的數據庫配置或數據庫平臺的漏洞所致;后者主要是由于程序員對輸入未進行細致地過濾,從而執行了非法的數據查詢。基于此,SQL注入的產生原因通常表現在以下幾方面:不當的類型處理;不安全的數據庫配置;不合理的查詢集處理;不當的錯誤處理;轉義字符處理不合適;和多個提交處理不當。目前,現有常見的SQL注入防御技術是關鍵詞方法,即檢測用戶提交的SQL語句中的關鍵字。這種方法雖然簡單,但是有兩個大的問題。一個是關鍵字漏判的問題,根據SQL語句的靈活性,有經驗的攻擊者很容易繞過服務器側預設的關鍵字進行攻擊,降低了SQL注入檢測的準確性。二是誤判關鍵字的問題。關鍵詞方法的誤報率很高,尤其是一些外文的網站,用戶提交大段的英文后,很容易匹配上預設的關鍵字。另外一種改進的SQL注入防御技術稱為知識庫方法。即在安全環境下學習合法的SQL語句,建立合法SQL語句知識庫,當服務器檢測到用戶提交的SQL語句與知識庫中合法SQL語句不匹配時,則判定存在SQL注入企圖。這種方法基于已知的安全SQL,但受限于SQL的完整性,其缺點在于不僅需要“充分”的SQL供系統學習已知的SQL語法樹,而如何定義“充分”是很難的。如果需要大量的學習達到所謂“充分”的標準,則學習成本和執行效率都會受到嚴重的影響。另外,知識庫方法不能窮舉所有的SQL語法樹,因此也就不能避免誤報。目前只能通過需要不斷更新合法SQL語句知識庫來減少誤報的發生,非常繁瑣,效率很低。因此,需要一種能有效的SQL注入防御技術能夠解決上述問題,快速高效地識別SQL注入。
技術實現要素:本發明的目的在于提供一種針對數據庫的SQL注入防御的方法,所述方法包括如下步驟:(a)接收來自應用系統發出的訪問數據庫的SQL語句;(b)對SQL語句進行注入判斷和檢查,若發現SQL注入,則對該SQL注入進行攔截,記錄錯誤,并向所述應用系統返回異常消息;若發現并非為SQL注入,則查詢出該SQL語句所需要訪問的相應數據庫操作的接口規范,拼接出符合該數據庫操作接口規范的SQL語句;(c)將步驟(b)拼接出的規范的SQL語句發送到相應的數據庫進行數據庫操作;和(d)將查詢后的結果返回給應用系統。優選地,所述應用系統是客戶端/服務器或瀏覽器/服務器模式。優選地,所述應用系統是客戶端/服務器或瀏覽器/服務器模式。優選地,為所述應用系統提供的數據庫操作類型包括選擇、插入、更新和刪除。優選地,所述數據庫操作的接口規范包括數據庫操作接口所接受的數據庫、表、合法語法格式。優選地,所述對SQL語句進行注入判斷和檢查基于如下規范:(a)當前數據庫操作接口允許操作的數據庫、表;(b)當前數據庫操作接口的子句中的語法規則;以及(c)當前數據庫操作接口的子句中的語義規則。優選地,所述規范(b)中的語法規則是將SQL子句轉化成轉碼字符的序列從而構造語法轉碼表。優選地,對所述轉換碼后的字符進行逐字符的掃描以判斷是否為SQL注入。優選地,判斷所掃描的字符是否是數字、單引號、雙引號、關鍵字符或空格中的任意一者。優選地,所述步驟(b)的拼接是針對選擇、插入、更新和刪除四種數據庫操作分別進行的拼接。根據本發明的方法設置數據庫代理服務器,用運維手段切斷除了數據庫代理服務器以外的任何應用系統對數據庫的訪問權限,提高了數據庫訪問的安全性,防止了SQL注入。應當理解,前述大體的描述和后續詳盡的描述均為示例性說明和解釋,并不應當用作對本發明所要求保護內容的限制。附圖說明參考隨附的附圖,本發明更多的目的、功能和優點將通過本發明實施方式的如下描述得以闡明,其中:圖1示意性地示出了根據本發明的SQL注入防御系統的系統框圖;圖2示出了根據本發明的SQL注入防御方法流程圖;圖3示出了SQL注入檢查及子句檢查的算法流程圖。圖4示出了拼接規范SQL語句的算法流程圖。具體實施方式通過參考示范性實施例,本發明的目的和功能以及用于實現這些目的和功能的方法將得以闡明。然而,本發明并不受限于以下所公開的示范性實施例;可以通過不同形式來對其加以實現。說明書的實質僅僅是幫助相關領域技術人員綜合理解本發明的具體細節。在下文中,將參考附圖描述本發明的實施例。在附圖中,相同的附圖標記代表相同或類似的部件,或者相同或類似的步驟。根據本發明的SQL注入防御的方法和系統,在SQL語句訪問數據庫之前,設置了提供數據庫查詢的數據庫代理服務器,該數據庫代理服務器通過客戶端/服務器(C/S)、瀏覽器/服務器(B/S)等模式為需要以SQL語句對數據庫進行訪問的應用系統提供了指定的數據庫操作接口。根據本發明,通過運維手段切斷除了數據庫代理服務器以外的任何應用系統對數據庫的訪問權限,使得所有的應用系統的數據庫查詢都只通過該數據庫代理服務器。根據本發明的數據庫代理...