Java防止SQL注入的幾個(gè)途徑

java防SQL注入,最簡(jiǎn)單的辦法是杜絕SQL拼接,SQL注入攻擊能得逞是因?yàn)樵谠蠸QL語(yǔ)句中加入了新的邏輯,如果使用PreparedStatement來(lái)代替Statement來(lái)執(zhí)行SQL語(yǔ)句,其后只是輸入?yún)?shù),SQL注入攻擊手段將無(wú)效,這是因?yàn)镻reparedStatement不允許在不同的插入時(shí)間改變查詢的邏輯結(jié)構(gòu) ,大部分的SQL注入已經(jīng)擋住了, 在WEB層我們可以過(guò)濾用戶的輸入來(lái)防止SQL注入比如用Filter來(lái)過(guò)濾全局的表單參數(shù)
01 import java.io.IOException;
02 import java.util.Iterator;
03 import javax.servlet.Filter;
04 import javax.servlet.FilterChain;
05 import javax.servlet.FilterConfig;
06 import javax.servlet.ServletException;
07 import javax.servlet.ServletRequest;
08 import javax.servlet.ServletResponse;
09 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 /**
12 * 通過(guò)Filter過(guò)濾器來(lái)防SQL注入攻擊
13 *
14 */
15 public class SQLFilter implements Filter {
16 private String inj_str = "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|; |or|-|+|,";
17 protected FilterConfig filterConfig = null;
18 /**
19 * Should a character encoding specified by the client be ignored?
20 */
21 protected boolean ignore = true;
22 public void init(FilterConfig config) throws ServletException {
23 this.filterConfig = config;
24 this.inj_str = filterConfig.getInitParameter("keywords");
25 }
26 public void doFilter(ServletRequest request, ServletResponse response,
27 FilterChain chain) throws IOException, ServletException {
28 HttpServletRequest req = (HttpServletRequest)request;
29 HttpServletResponse res = (HttpServletResponse)response;
30 Iterator values = req.getParameterMap().values().iterator();//獲取所有的表單參數(shù)
31 while(values.hasNext()){
32 String[] value = (String[])values.next();
33 for(int i = 0;i < value.length;i++){
34 if(sql_inj(value[i])){
35 //TODO這里發(fā)現(xiàn)sql注入代碼的業(yè)務(wù)邏輯代碼
36 return;
37 }
38 }
39 }
40 chain.doFilter(request, response);
41 }
42 public boolean sql_inj(String str)
43 {
44 String[] inj_stra=inj_str.split("\\|");
45 for (int i=0 ; i < inj_stra.length ; i++ )
46 {
47 if (str.indexOf(" "+inj_stra[i]+" ")>=0)
48 {
49 return true;
50 }
51 }
52 return false;
53 }
54 }
也可以單獨(dú)在需要防范SQL注入的JavaBean的字段上過(guò)濾:
1 /**
2 * 防止sql注入
3 *
4 * @param sql
5 * @return
6 */
7 public static String TransactSQLInjection(String sql) {
8 return sql.replaceAll(".*([';]+|(--)+).*", " ");
9 }
相關(guān)文章
- 這篇文章主要介紹了SQL注入黑客防線網(wǎng)站實(shí)例分析,需要的朋友可以參考下2017-05-19
ASP+PHP 標(biāo)準(zhǔn)sql注入語(yǔ)句(完整版)
這里為大家分享一下sql注入的一些語(yǔ)句,很多情況下由于程序員的安全意識(shí)薄弱或基本功不足就容易導(dǎo)致sql注入安全問(wèn)題,建議大家多看一下網(wǎng)上的安全文章,最好的防范就是先學(xué)2017-05-19mysql 注入報(bào)錯(cuò)利用方法總結(jié)
這篇文章主要介紹了mysql 注入報(bào)錯(cuò)利用方法總結(jié)的相關(guān)資料,需要的朋友可以參考下2016-10-08- SQL注入是從正常的WWW端口訪問(wèn),而且表面看起來(lái)跟一般的Web頁(yè)面訪問(wèn)沒(méi)什么區(qū)別,所以目前市面的防火墻都不會(huì)對(duì)SQL注入發(fā)出警報(bào),如果管理員沒(méi)查看IIS日志的習(xí)慣,可能被入2016-05-21
- 這篇文章主要為大家介紹了SQL注入測(cè)試實(shí)例分析,對(duì)于數(shù)據(jù)庫(kù)安全非常重要,需要的朋友可以參考下2014-08-06
- sqlmap 是一個(gè)自動(dòng)SQL 射入工具。本文收集了一些利用Sqlmap做注入測(cè)試的TIPS,其中也包含一點(diǎn)繞WAF的技巧,便于大家集中查閱,歡迎接樓補(bǔ)充、分享。2014-07-29
- 畢業(yè)開始從事winfrm到今年轉(zhuǎn)到 web ,在碼農(nóng)屆已經(jīng)足足混了快接近3年了,但是對(duì)安全方面的知識(shí)依舊薄弱,事實(shí)上是沒(méi)機(jī)會(huì)接觸相關(guān)開發(fā)……必須的各種借口。這幾天把sql注入2012-11-06
- SQL注入攻擊的危害性很大。在講解其防止辦法之前,數(shù)據(jù)庫(kù)管理員有必要先了解一下其攻擊的原理。這有利于管理員采取有針對(duì)性的防治措施2012-07-10
web 頁(yè)面 一些sql注入語(yǔ)句小結(jié)
web 頁(yè)面 一些sql注入語(yǔ)句小結(jié),對(duì)于開發(fā)人員來(lái)說(shuō)一定要注意的事項(xiàng)。2012-03-12手動(dòng)mysql 高級(jí)注入實(shí)例分析
為了 方便 自己隨手寫了個(gè) sql.php注入點(diǎn) 。經(jīng)典的 id沒(méi)有過(guò)濾 造成 sql語(yǔ)句帶入?yún)?shù) 形成注入, 對(duì)了 大家導(dǎo)入test.sql 這個(gè)數(shù)據(jù)庫(kù)文件吧2010-08-04