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

最近项目在做安全扫描,扫出来“跨域脚本攻击”的安全漏洞,修复这个漏洞的时候发现了一个问题:
当FORM 表单中设置encType="multipart/form-data",filter中将拦截不到此表单数据,查看了一些源码发现此数据都是封装到multipartServeletRequest中的,但是能拿到这些数据,但是过滤之后,这些数据无法放回去。
导致此问题无法解决,问过公司架构师,貌似他们也没有好的方法。只能建议,有上传功能时,单独上传,跟数据上传分开做。

对于普通的form表单,修复此漏洞,只需将request.getParameterMap()中的数据迭代替换。
由于项目保密问题,以下是关键代码:

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包,网上可以搜索到,在此不上传了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值