美國站群服務器如何做好防護SQL注入漏洞
美國站群服務器如何做好防護SQL注入漏洞【艾娜】
1. SQL注入原理
漏洞形成原因:用戶輸入的數據被SQL解釋器執行。
2. 常見的SQL注入類型分類
數字型 & 字符型,不管注入類型如何,攻擊者的目的只有一點,那就是繞過程序限制,使用戶輸入的數據帶入數據庫執行,利用數據庫的特殊性獲取更多的信息或者更大的權限。
舉個例子:
(1)在頁面URL后面輸入:user_id=1' and 1=1 order by 4 #
;
(2)加載頁面,將url的參數傳入后臺,后臺執行SQL語句為:SELECT first_name, last_name FROM users WHERE user_id = '1' and 1=1 order by 4 #'
;
(3)根據SQL語法可知,#
號將后續的引號注釋了。order by
是用來查詢列數的,當字段數超過數據庫的字段數,數據庫就會返回錯誤信息,因此,可以利用order by
來猜測數據庫的字段數。因此,如果熟悉SQL語句,就可以進一步寫入更多的語句,查詢數據庫,導致隱私數據泄漏。
常見利用數據庫注入目的:
(1)查詢數據
(2)讀寫文件
(3)執行命令
【 防止SQL注入】
數據庫并沒有什么好的辦法直接過濾SQL注入。只負責執行SQL語句,根據SQL語句來返回相關數據。
因此:防御SQL注入,還是得從代碼入手。
根據SQL注入的分類,防御主要分為兩種:數據類型判斷
和特殊字符轉義
。
嚴格的數據類型
例如:請求ID為1的新聞。
URL://www.wecbug.org.news.jsp?id=1int id = Integer.parseInt(request.getParameter('id'));// 接收ID參數,并轉換為int類型News news = newsDao.findNewsById(id);
攻擊者想在此代碼中注入是不可能的,因為程序在接收ID參數后,做了一次數據類型的轉換,如果ID參數接收的數據是字符串,那么在轉換時將會發生Exception。由此可見,只需要在程序中嚴格判斷數據類型即可,數據類型處理正確后,足以抵擋數字型注入。
特殊字符轉義
在數據庫查詢字符串時,任何字符都必須加上單引號,既然知道攻擊者在字符型注入中必然會出現單引號等特殊字符,那么將這些特殊字符轉義即可防御字符型SQL注入。
例如:用戶搜索數據://www.xxser.con/news?tag=電影
SQL注入語句如下:
select title,content from news where tag='%電影' and 1=2 union select username, password from users -- %'
防止SQL注入應該在程序中判斷字符串是否存在敏感字符,如果存在,則根據相應的數據庫進行轉義。如:MySQL使用“\”轉義,如果以上代碼使用數據庫為MySQL,那么轉義后的SQL語句如下:
select title,content from news where tag='%電影\' and 1=2 union select username, password from users -- %'
這樣轉義之后,后面的SQL語句就無法執行,一次,也就防御了SQL的注入。
使用預編譯語句(
Statement
、CallableStatement
、PreparedStatement
)
框架技術
存儲過程
總結:
SQL注入的危害雖然很大,但是可以完全杜絕,程序開發團隊一定要有自己的安全規范模版,因為不可能每個程序員都了解SQL注入,所以團隊有一套自己的模板之后,SQL注入會大大減少。比如,碰到SQL語句完全采用“PrepareStatement”類,且必須用參數綁定,如果這樣還存在SQL注入,那就是某個程序員沒有遵循規范,這樣就從安全轉移到代碼規范問題上,只要遵循規范,就不會有問題,這一方法無論是SQL注入,還是后面的其他漏洞,都適用。
-------------------------------
縱橫數據 美國站群服務器 香港站群服務器 歡迎聯系在線客服 艾娜QQ 482986990