防止sql註入的方法
防止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註入的方法