# Java 防止SQL 注入和脚本注入

**URL:** <https://www.isharkfly.com/t/java-sql/6478>\
**Category:** 程序语言\
**Created:** [April 13, 2011, 7:11am UTC](https://www.isharkfly.com/t/java-sql/6478 "2011-04-13T07:11:59Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![honeymoose](https://www.isharkfly.com/user_avatar/www.isharkfly.com/honeymoose/32/20796_2.png) [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Post date:** [April 13, 2011, 7:11am UTC](https://www.isharkfly.com/t/java-sql/6478/1 "2011-04-13T07:11:59Z")

</div>

项目做完了，发现存在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("<", "&lt;").replaceAll(">", "&gt;");   
    value = value.replaceAll("\\(", "（").replaceAll("\\)", "）");   
    value = value.replaceAll("eval\\((.*)\\)", "");   
    value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");   
    value = value.replaceAll("script", "");  
    return value;
}[/code]

```
