java web sql注入漏洞
這段時間做專案發現了一個問題就是sql注入漏洞,最開始我根本就不知道什麼是sql注入漏洞,也不知道是怎麼一回事,但是問題被發現了就只有去解決啊。我百度才知道這就是一些人利用sql語句進行獲取資料的一種方式。
簡單來說就是當你在你的網站上根據你提供的查詢條件來查詢資料的時候,一些人把你的查詢條件寫成一些sql語句(例如:select *from XXX where 1=1...),導致資料庫的資料外洩,刪除等。(聽說最近很火的12306網站資料洩露就是被sql注入的,當然不知道是真是假了)
既然知道有這麼危險的問題,那麼該怎麼解決呢?當然是對你提供的查詢條件進行過濾了,把一些非法的一些字元過濾掉,比如一些關鍵字眼:select 、alert、delete、insert、invoke等等這些DDL語句。
下面給出過濾sql注入的部分程式碼,有什麼問題還請大家給出意見。
public String toSelectSql(String q){
if(StringUtils.isBlank(q)) return "";
char c='\\';
int cIndex=q.indexOf(c);
if(cIndex!=-1&&cIndex==0){
q=q.substring(1);
}
if(cIndex!=-1&&cIndex==q.length()-1){
q=q.substring(0,q.length()-1);
}
try {
String regular = "[\\+\\-\\&\\|\\!\\(\\)\\{\\}\\[\\]\\^\\~\\*\\?\\:\\\\]";
Pattern p = Pattern.compile(regular);
Matcher m = p.matcher(q);
String src = null;
while (m.find()) {
src = m.group();
q = q.replaceAll("\\" + src, ("\\\\" + src));
}
q = q.replaceAll("AND", "and").replaceAll("OR", "or").replace("NOT", "not");
} catch (Exception e) {
q=q;
}
return q;
}