吳濤 張俊



摘要:隨著互聯網的發展,基于 Web 服務器語言和后臺數據庫模式的網站存在安全性問題,其中SQL注入數據庫是最具威脅B/S系統漏洞的攻擊。該文分析了SQL注入原理及特點,研究了預防 SQL注入的攻擊方法,針對B/S系統的特點,提出了字段檢查、注入測試、服務器加固、綁定變量和禁止字符串拼接等SQL注入的防治手段,對預防SQL注入提供了有效的方法,增加了B/S系統的安全性。
關鍵詞:SQL注入;B/S架構;WEB安全
中圖分類號:TP393? ? ? ?文獻標識碼:A
文章編號:1009-3044(2020)02-0007-02
Abstract: with the development of Internet, there are security problems in Web sites Based on Web server language and background database mode, among which SQL injection database is the most dangerous attack to B/S system vulnerability. This paper analyzes the principle and characteristics of SQL injection, studies the methods to prevent SQL injection. According to the characteristics of B/S system, it puts forward the prevention measures of SQL injection, such as field check, injection test, server reinforcement, binding variables and forbidding string splicing. It provides an effective method to prevent SQL injection and increases the security of B/S system.
Key words: SQL injection; B/S architecture; Web Security
由于網絡的快速發展,B/S系統的功能越來越強大。B/S系統通過瀏覽器即可進行訪問,十分便捷。同時B/S系統也伴隨著各方面的安全性問題,其中SQL注入是一個很敏感的漏洞,其特點是在用戶輸入或者信息上傳時,將惡意數據或者代碼上傳到 WEB 應用系統中,導致系統崩潰、獲取敏感信息等惡劣行為。SQL 注入攻擊的技術門檻低、隱蔽性強、危害性大、殺毒軟件也無法查殺,一旦若獲取網站 Web Shell 權限,便可上傳網頁木馬、控制整站等違法操作。本文針對SQL注入原理及特點,提出了字段檢查、注入測試、服務器加固和綁定變量等有效的防治手段,旨在增強B/S系統的安全性。
1 SQL注入的原理和方法
SQL注入就是通過輸入域或頁面請求的查詢字符串,欺騙服務器執行惡意的SQL命令[1],從而獲得數據,對數據庫進行破壞等操作,最終達到控制整個服務器的目的。典型的SQL注入分為兩類,分別是數據庫平臺注入和應用層注入(WEB應用層)。數據庫平臺注入往往是存在惡意攻擊數據庫。數據庫平臺的注入就需要數據庫管理人員(DBA)對數據進行全方位的管理,包括數據庫的配置,數據庫權限的管理等等,能夠在數據庫層面有效地杜絕SQL的注入;平臺注入就是典型的進行發送請求字符串,構成一些特殊的SQL語句(例如“selecr * from Student where from password = ‘xxx ‘ or 1 = 1”等),從而進行系統的破壞或者獲得非法數據。由于SQL注入的信息和普通用戶訪問的方式一模一樣,難以防御,所以SQL注入也成為B/S系統一個很嚴重的安全問題。典型的輸入域和請求查詢的時機如表1所示。
2 SQL注入的防治手段
2.1 進行字段檢查
SQL注入時使用一些特殊的字符去拼接服務器后臺的SQL語句,常見是字符串拼接如表2所示。為了防止這種字符串的拼接,增加信息的安全性,我們可以對異常注入的信息建立一個云計算庫,并定期對庫中的數據進行管理、升級等等。從而到達數據的及時性。當我們在執行SQL語句的時候。自動在庫中進行匹配。若發現相似度高的、可疑的。發現問題及時進行反饋[2]。匹配具體流程如圖1所示。
2.2 進行大規模的注入測試
SQL注入典型的攻擊有盲目注入,建表操作,跨表操作。對于盲目注入[3],就是攻擊對象去惡意猜測服務器端的錯誤,用一些可能錯誤的代碼進行大量測試,最終達到竊取服務器數據的問題。盲目注入又分為布爾盲注,時間盲注,延時盲注等,我們可以針對不同的盲注方式[4],在程序上線之前,對程序進行嚴格的測試,以便發現問題并解決問題。
2.3 對數據庫服務器進行加固
對數據庫服務器端進行加固,增加服務器的防火墻水平,對不同的用戶進行不同的權限受理[5],這樣,一般的用戶就只能看到自己權限范圍內的數據,當用戶進行越級操作的時候,設置觸發機制,及時進行反饋,檢查是否出現SQL注入問題。提高數據庫的日志記錄級別,把日志記錄保存到獨立的物理磁盤上面,定期進行檢查,發現疑似問題及時進行修復。
2.4 綁定變量
當我們大規模使用SQL語句的時候,一條一條的SQL語句這樣的執行,顯然就不滿足效率的要求了,我們可以對一段SQL語句進行“聚集”化的操作,使一段SQL語句編程一個整體,就是綁定變量的方法,執行的時候,就是一次性執行完畢,這種方法雖然在一定程度上防止了SQL注入的風險。但是這種方式也存在一些弊端,額外的編碼過程就顯得十分的繁重,但是能夠避免SQL的安全性問題,應該進行權衡,在進行綁定變量的操作。
2.5 禁止使用字符串的拼接
數據庫中有兩種傳值符號,一種是$(),作用是在進行字符串拼接后,再由數據庫進行編譯,通常使用JDBC中的Starement對象來進行語句的執行,在數據庫平臺中,對特殊字符的防范是很弱的,一旦變量進入了數據庫系統,很大程度上增加了SQL注入的風險;一種是#(),這種被稱為占位符,在進行數據庫訪問的時候,先把SQL語句中需要拼接的字段通過特殊符號進行占位,然后進行數據庫的預編譯,預編譯完成之后,在對相應字段進行字符串的拼接,注入參數后,就不會在對SQL進行編譯。通常配合JDBC中的prepareStatement來進行預編譯;在數據庫的操作中,應該禁止$()的使用,能夠有效地預防SQL的注入;#()和$()的區別如表3所示;
3 結束語
隨著B/S架構的快速發展,服務器的安全性也顯得越來越重要,SQL注入可以繞過殺毒軟件的查殺,如果不增加特別的防護,SQL注入將會竊取我們的數據。安全性不容忽視。本文介紹的字段檢查、注入測試、數據庫加固、綁定變量和禁止字符串拼接等,從各個方面闡述了預防SQL注入的方法,能夠有效地預防SQL的注入,保證用戶和公司的安全。
參考文獻:
[1] 葉良艷. SQL注入漏洞檢測防御關鍵技術綜述[J]. 安徽電子信息職業技術學院學報, 2018, 17(3):19-22.
[2] 葉夢雄. 基于Web的SQL注入漏洞掃描系統的設計研究[J]. 電子設計工程, 2019, 27(16):20-23, 28.
[3] 王苗苗, 錢步仁, 許瑩瑩, 等. 基于通用規則的SQL注入攻擊檢測與防御系統的研究[J]. 電子設計工程, 2017, 25(5):24-28, 32.
[4] 高洪濤. SQL注入攻擊途徑及策略分析[J]. 網絡安全技術與應用, 2011(3):14-16.
[5] 劉雪梅. 基于SQL Server數據庫的安全性對策探究[J]. 電腦編程技巧與維護, 2019(9):96-98.
【通聯編輯:謝媛媛】