JAVA WEB项目解决XSS攻击的办法

记一次JAVA WEB项目解决XSS攻击的办法(亲测有效)

Posted on 2019-03-01 13:22  zkongbai  阅读(4381)  评论(4)  编辑  收藏

  • 什么是XSS攻击

    简单来说,XSS 攻击是页面被注入了恶意的代码,度娘一大堆的东西,不想说

  • 系统架构主要是SSM框架,服务层另外使用了DubboX.

     为啥说这个,因为SpringMVC对于Xss攻击需要特殊处理

  • 思路  

    其实XSS工具解决思路就是捕获客户端提交的参数进行捕获,然后对参数值进行过滤处理,去除那些非法的字符.

    但是请求通常分为GET请求与POST请求,针对不同的请求,处理方式是不一样的

  • 步骤:

    1.针对GET与非文件格式上传的post请求.(form 表单提交的时候 没有这个参数enctype="multipart/form-data"),JSON请求等

1) web.xml配置过滤器

 View Code

2)过滤器实现 XssFilter.java,针对部分特殊请求,要求不走过滤的,可以在此过滤器中放行

 View Code

3) XssHttpServletRequestWrapper

 View Code

4) 使用到的编码工具,过滤参数使用了xss-html-filter工具,具体可以自行替换

 View Code

5) pom.xml 配置引用的jar

1 <dependency>
2        <groupId>net.sf.xss-html-filter</groupId>
3        <artifactId>xss-html-filter</artifactId>
4        <version>1.5</version> 
5 </dependency>

    2.针对enctype="multipart/form-data"格式的post提交

1) 更改springMVC默认Annotation适配器(org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter - ->    cn.ffcs.web.filter.XssAnnotationMethodHandlerAdapter),如果没有则添加

复制代码

1 <!-- annotation方法修饰器 -->
2 <bean id="handlerAdapter" class="cn.ffcs.web.filter.XssAnnotationMethodHandlerAdapter">
3 
4 ....
5 
6 <bean>

复制代码

2) 继承AnnotationMethodHandlerAdapter 并覆盖handle方法

复制代码

 1 package cn.ffcs.web.filter;
 2 
 3 import java.util.Map;
 4 import java.util.Set;
 5 
 6 import javax.servlet.http.HttpServletRequest;
 7 import javax.servlet.http.HttpServletResponse;
 8 
 9 import net.sf.xsshtmlfilter.HTMLFilter;
10 
11 import org.apache.commons.lang.StringUtils;
12 import org.springframework.web.servlet.ModelAndView;
13 import org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter;
14 @SuppressWarnings("deprecation")
15 public class XssAnnotationMethodHandlerAdapter extends
16         AnnotationMethodHandlerAdapter {
17     
18     
19     @SuppressWarnings({ "rawtypes", "unchecked" })
20     private void myXss(HttpServletRequest request){
21         Map map = request.getParameterMap();
22         Set<String> keySet = map.keySet();
23         for(String key : keySet){
24             String[] values = request.getParameterValues(key);
25             if(values!=null&&values.length>0){
26                 for(int i=0 ;i<values.length;i++){
27                     if(!StringUtils.isBlank(values[i])){
28                         values[i] = XssEncode.xssEncode(values[i]);
29                     }
30                 }
31             }
32         }
33     }
34     
35     @Override
36     public ModelAndView handle(HttpServletRequest request,
37             HttpServletResponse response, Object handler) throws Exception {
38         myXss(request);
39         return super.handle(request, response, handler);
40     }
41 }

复制代码

 

tip: 网上另外有说用反射实现带@Controller的控制器,感觉思路可以,但是没有成功.

谁能知道自己的错失呢?愿你赦免我隐而未现的过错.求你阻扰仆人不犯任意妄为的罪,不容这罪辖制我,我便完全,免犯大罪.--诗19:12-13

分类: java

标签: XSS攻击java

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值