1. 程式人生 > >防止sql註入的方法

防止sql註入的方法

lib cte md5 class title 服務器 問題 避免 破壞

防止sql註入從前端的頁面到後臺可以分為以下幾個辦法:

1.在前端頁面就可以用js過濾數據

要引入的包:

import Java.util.regex.*;

正則表達式:

private String CHECKSQL = “^(.+)\\sand\\s(.+)|(.+)\\sor(.+)\\s$”;

判斷是否匹配:

Pattern.matches(CHECKSQL,targerStr);

下面是具體的正則表達式:

檢測SQL meta-characters的正則表達式 :

/(\%27)|(\’)|(\-\-)|(\%23)|(#)/ix

修正檢測SQL meta-characters的正則表達式 :/((\%3D)|(=))[^\n]*((\%27)|(\’)|(\-\-)|(\%3B)|(:))/i

典型的SQL 註入攻擊的正則表達式 :/\w*((\%27)|(\’))((\%6F)|o|(\%4F))((\%72)|r|(\%52))/ix

檢測SQL註入,UNION查詢關鍵字的正則表達式 :/((\%27)|(\’))union/ix(\%27)|(\’)

檢測MS SQL Server SQL註入攻擊的正則表達式:

/exec(\s|\+)+(s|x)p\w+/ix

2.後臺可以使用預編譯,參數化查詢的方法防止sql註入

采用預編譯語句集,它內置了處理SQL註入的能力,只要使用它的setXXX方法傳值即可。

使用好處:

(1).代碼的可讀性和可維護性.

(2).PreparedStatement盡最大可能提高性能.

(3).最重要的一點是極大地提高了安全性.

原理:

sql註入只對sql語句的準備(編譯)過程有破壞作用

而PreparedStatement已經準備好了,執行階段只是把輸入串作為數據處理,

而不再對sql語句進行解析,準備,因此也就避免了sql註入問題.

3.對密碼一類敏感的信息不要直接明文存儲,可以采用MD5或hash加密

4.異常信息不要直接拋出給用戶,最好自定義處理異常信息的類,因為異常信息裏也包括關於服務器的一些信息可能被利用。

防止sql註入的方法