项目做完了,发现存在SQL注入漏洞和脚本注入的漏洞,如果输入特殊符号如’之类的,后台会报脚本错误。
这里提供一个好的解决办法[code]public String intercept(ActionInvocation invocation) throws Exception {
ActionContext actionContext = invocation.getInvocationContext();
Map<String, Object> paraMap = actionContext.getParameters(); // 获取页面所有提交的参数
// 以Map形式存放
for (Iterator it = paraMap.entrySet().iterator(); it.hasNext();) { // 迭代
Map.Entry e = (Map.Entry) it.next();
Object obj = e.getValue(); // 参数的值,也就是页面输入的内容, 是Object类型
String val = "";
if (obj instanceof String[]) { // 注意:这里不是String类型。如果obj是String数组类型,则取数组第一索引的值
String[] strs = (String[]) obj;
val = strs[0]; // 这样就把参数的值(页面提交的原始数据)赋予了val
} else {
val = obj.toString();
}
// System.out.println(“转换前的值” + val);
// val = AppUtil.Html2Text(val);
val =StringEscapeUtils.escapeSql(val);
// System.out.println(“escapeSql:” + val);
//val =StringEscapeUtils.escapeHtml(val);这里发现如果是汉字的话会有问题
val = escapeHtml(val);//自己写的过滤方法
// System.out.println(“escapeHtml:” + val);
// //转换,过滤HTML标签有很多方法,commons.lang里好像也有,这里我自己找的,见下文
// System.out.println(“转换后的值” + val);
paraMap.put((String) e.getKey(), val);// 这句可不能忘了,把转换后的值再赋予对应的参数名
}
return invocation.invoke(); // action继续执行下去,固定写法
}
public String escapeHtml(String value)
{
value = value.replaceAll("<", "<").replaceAll(">", ">");
value = value.replaceAll("\\(", "(").replaceAll("\\)", ")");
value = value.replaceAll("eval\\((.*)\\)", "");
value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");
value = value.replaceAll("script", "");
return value;
}[/code]