昨天被扫描出来sql注入问题,之前以为已经解决了,没想到还是出现了。
网上现有方法:
1、preparestatement
由于每次执行都需要prepare,所以不推荐使用
2、一个单引号变成两个
replace("'","''")
其他的字符串替代方法有着局限性,就不列举了。
我最开始使用的是2方法,但是还是有方法可以破解。
后来参考php的addslashes函数,写了一个java的escapeSql方法,如下:
public static String escapeSql(String str) {
if (str == null) {
return null;
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
char src = str.charAt(i);
switch (src) {
case '\'':
sb.append("''");// hibernate转义多个单引号必须用两个单引号
break;
case '\"':
case '\\':
sb.append('\\');
default:
sb.append(src);
break;
}
}
return sb.toString();
}
经测试,已修复sql注入问题。