sql注入用转义字符防御时,如果遇到数据库的列名或是表名本身就带着特殊字符,应该怎么做?
字段名或者表名包含特殊符号不影响,防止注入的是字段值。
校验的时候把这些特定的再筛选出来,弄个除外的验证,类似于这样
protected boolean checkIsSQLInjection(String sql){
//统一转为小写
sql = sql.toLowerCase();
//过滤掉的sql关键字,可以手动添加
String badSql ="create|where|group|select|delete|update|drop|--|from|truncate|and|or ";
//避免误杀,排除合法参数
String exculedParam = "----|resourceupdate|for|findresbyresidorresname|roleupdate|userupdate|finduserbynumorname|extorg|";
String[] exculedParams = exculedParam.split("\\|");
String[] badSqls = badSql.split("\\|");
//排除合法参数
for(int k=0;k<exculedParams.length;k++){
if(sql.indexOf(exculedParams[k])>=0){
return false;
}
}
//检查注入
for(int i=0;i<badSqls.length;i++){
if(sql.indexOf(badSqls[i])>=0){
return true;
}
}
return false;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!