JAVA跨域脚本攻击,filter中拦截不到数据_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > JAVA跨域脚本攻击,filter中拦截不到数据

JAVA跨域脚本攻击,filter中拦截不到数据

 2014/6/6 12:40:13  单眼皮小猪  程序员俱乐部  我要评论(0)
  • 摘要:最近项目在做安全扫描,扫出来“跨域脚本攻击”的安全漏洞,修复这个漏洞的时候发现了一个问题:当FORM表单中设置encType="multipart/form-data",filter中将拦截不到此表单数据,查看了一些源码发现此数据都是封装到multipartServeletRequest中的,但是能拿到这些数据,但是过滤之后,这些数据无法放回去。导致此问题无法解决,问过公司架构师,貌似他们也没有好的方法。只能建议,有上传功能时,单独上传,跟数据上传分开做。对于普通的form表单,修复此漏洞
  • 标签:Java 数据 攻击 脚本
最近项目在做安全扫描,扫出来“跨域脚本攻击”的安全漏洞,修复这个漏洞的时候发现了一个问题:
当FORM 表单中设置encType="multipart/form-data",filter中将拦截不到此表单数据,查看了一些源码发现此数据都是封装到multipartServeletRequest中的,但是能拿到这些数据,但是过滤之后,这些数据无法放回去。
导致此问题无法解决,问过公司架构师,貌似他们也没有好的方法。只能建议,有上传功能时,单独上传,跟数据上传分开做。

对于普通的form表单,修复此漏洞,只需将request.getParameterMap()中的数据迭代替换。
由于项目保密问题,以下是关键代码:
class="java">
public class aaa implements Filter {
	public void doFilter(ServletRequest request, ServletResponse response,FilterChain filterChain) throws IOException, ServletException {
		setReplaceStr(filterConfig.getInitParameter("replaceStr"));//replaceStr变量 get和set方法
			setExcludeParamName(filterConfig
					.getInitParameter("excludeParamName"));//excludeParamName变量 get和set方法

cleanParameters(request.getParameterMap());
		filterChain.doFilter(req, response);
	}
private void cleanParameters(Map original) {
		for (Object key : original.keySet()) {

			Object value = original.get(key);
			if (value instanceof String[]) {
				// 不需要过滤的参数名
				if (getExcludeParamNames() != null
						&& getExcludeParamNames().contains(key)) {
					parameterMap.put(key, (String[]) value);
				} else {
					parameterMap.put(key, clean((String[]) value));
				}
			} else {
				parameterMap.put(key, value);
			}
		}
	}
private String[] clean(String[] values) {
		List<SensitiveKeyFilterKey> keys = null;
		String[] clean = new String[values.length];
		for (int i = 0; i < clean.length; i++) {
			// 清理xss攻击
			clean[i] = Jsoup.clean(values[i], TagWhitelist.defaultWhitelist());
					}
		return clean;
	}
}


其中Jsoup是一个开源的jar包,网上可以搜索到,在此不上传了。
发表评论
用户名: 匿名