SQL注入防御的方法有哪些

sql注入防御的方法有:1、PreparedStatement;2、使用正則表達式過濾傳入的參數;3、字符串過濾。其中,采用預編譯語句集是簡單又有效的方法,因為它內置了處理SQL注入的能力。

SQL注入防御的方法有哪些

sql注入防御的方法

下面針對JSP,說一下應對方法:

(推薦學習:mysql教程

1、(簡單又有效的方法)PreparedStatement

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

使用好處:

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

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

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

原理:

sql注入只對sql語句的準備(編譯)過程有破壞作用,而PreparedStatement已經準備好了,執行階段只是把輸入串作為數據處理,而不再對sql語句進行解析、準備,因此也就避免了sql注入問題。

2、使用正則表達式過濾傳入的參數

要引入的包:

import?java.util.regex.*;

正則表達式:

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

判斷是否匹配:

Pattern.matches(CHECKSQL,targerStr);

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

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

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

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

/((%3D)|(=))[^ ]*((%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)pw+/ix

等等…..

3、字符串過濾

比較通用的一個方法:(||之間的參數可以根據自己程序的需要添加)

public?static?boolean?sql_inj(String?str){ String?inj_str?=?"'|and|exec|insert|select|delete|update| count|*|%|chr|mid|master|truncate|char|declare|;|or|-|+|,"; String?inj_stra[]?=?split(inj_str,"|"); for?(int?i=0?;?i?=0){ return?true; } } return?false; }

凡涉及到執行的SQL中有變量時,用JDBC(或者其他數據持久層)提供的如:PreparedStatement就可以 ,切記不要用拼接字符串的方法就可以了。

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享