導致sql注入的根本原因
1.sql注入的定義
SQL注入即是指web應用程序對用戶輸入數據的合法性沒有判斷或過濾不嚴,攻擊者可以在web應用程序中事先定義好的查詢語句的結尾上添加額外的SQL語句,在管理員不知情的情況下實現非法操作,以此來實現欺騙數據庫服務器執行非授權的任意查詢,從而進一步得到相應的數據信息.
2.導致sql注入的根本原因
用戶輸入的信息中含有sql語句的關鍵字,並且這些關鍵字參與sql語句的編譯過程。
導致sql語句的原意被扭曲,進而達到sql注入.
解決SQL注入問題:
只要用戶提供的信息不參與sql語句的編譯過程,問題就解決了
即用戶提供的信息中含有sql語句的關鍵字,但是沒有參與編譯,不起作用
要想用戶信息不參與SQL語句的編譯,那么必須使用java.sql.PreparedStatement
PreparedStatemeent接口繼承 java.sql.Statement
PreparedStatement是屬於預編譯的數據庫操作對象
PreparedStatement的原理是:預先對SQL語句的框架進行編譯,再給SQL語句傳“值”
3.防止SQL注入
- 1.永遠不要信任用戶的輸入。對用戶的輸入進行校驗,可以通過正則表達式,或限制長度;對單引號和 雙"-"進行轉換等。
- 2.永遠不要使用動態拼裝sql,可以使用參數化的sql或者直接使用存儲過程進行數據查詢存取。
- 3.永遠不要使用管理員權限的數據庫連接,為每個應用使用單獨的權限有限的數據庫連接。
- 4.不要把機密信息直接存放,加密或者hash掉密碼和敏感的信息。
- 5.應用的異常信息應該給出盡可能少的提示,最好使用自定義的錯誤信息對原始錯誤信息進行包裝
- 6.sql注入的檢測方法一般采取輔助軟件或網站平台來檢測,軟件一般采用sql注入檢測工具jsky,網站平台就有億思網站安全平台檢測工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻擊等。