你在init函數(shù)中修改了 inj_str的值, 而你在調(diào)用這個(gè)函數(shù)時(shí)有沒(méi)有傳FilterConfig config啊。
成都創(chuàng)新互聯(lián)公司始終堅(jiān)持【策劃先行,效果至上】的經(jīng)營(yíng)理念,通過(guò)多達(dá)10多年累計(jì)超上千家客戶的網(wǎng)站建設(shè)總結(jié)了一套系統(tǒng)有效的全網(wǎng)推廣解決方案,現(xiàn)已廣泛運(yùn)用于各行各業(yè)的客戶,其中包括:人造霧等企業(yè),備受客戶表?yè)P(yáng)。
采用預(yù)編譯語(yǔ)句集,它內(nèi)置了處理SQL注入的能力,只要使用它的setString方法傳值即可:
String
sql=
"select
*
from
users
where
username=?;
PreparedStatement
preState
=
conn.prepareStatement(sql);
preState.setString(1,
userName);
preState.setString(2,
password);
ResultSet
rs
=
preState.executeQuery();
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???}
當(dāng)前標(biāo)題:java防注入攻擊的代碼,防止js注入攻擊
文章出自:http://chinadenli.net/article42/hdoshc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、網(wǎng)站制作、靜態(tài)網(wǎng)站、建站公司、做網(wǎng)站、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)