为了应对 Xss 跨站脚本攻击,新增 XssFilter 统一处理实践

2 篇文章 0 订阅

问题背景:

1、早期的软件产品,使用 spring mvc 

2、jsp form 表单中要传附件,同时有 input 字段要提交,因此表单 encType 必须是 multipart/form-data, action="POST"

问题:

1、按照流转很广的方式 ,新建 XssFilterServletRequestWrapper extends HttpServletRequestWrapper, XssFilter 中 dofilter 方法中  HttpServletRequest req = (HttpServletRequest) request; 对  ServletRequest 参数进行强制类型转换,然后 

XssFilterServletRequestWrapper wrapper = new XssFilterServletRequestWrapper(req);
chain.doFilter(wrapper, response);

结果, XssFilterServletRequestWrapper 中的  getParameter  getParameterValues 方法中取不到表单中的 参数值

原因: multipart/form-data 提交到 servlet 的数据格式不是 key/value 格式,是流的格式,所以 getParameter  取不到值

解决: 

1、可以用smartupload 解析 form 提交的流数据

2、高级一点的,用 spring 造好的轮子 MultipartHttpServletRequest 接口来处理,MultipartHttpServletRequest 继续了  javax.servlet.http.HttpServletRequest 接口 和 org.springframework.web.multipart.MultipartRequest 接口,关键代码如下:

 HttpServletRequest req = (HttpServletRequest) request;

MultipartHttpServletRequest multiReq = multipartResolver.resolveMultipart(req);

XssFilterServletRequestWrapper wrapper = new XssFilterServletRequestWrapper(multiReq);

chain.doFilter(wrapper, response);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值