转:

Java Web使用过滤器防止Xss攻击,解决Xss漏洞

2018年11月11日 10:41:27 我欲乘风,直上九天 阅读数:2687
 
版权声明:本文为博主原创文章,转载请注明出处!有时候也不是原创,手快就选了(我的文章随意转载复制,不在乎的哈!) https://blog.csdn.net/qq_31384551/article/details/83956681

web.xml添加过滤器

  1. <!-- 解决xss漏洞 -->
  2. <filter>
  3. <filter-name>xssFilter</filter-name>
  4. <filter-class>com.quickly.exception.common.filter.XssFilter</filter-class>
  5. </filter>
  6. <!-- 解决xss漏洞 -->
  7. <filter-mapping>
  8. <filter-name>xssFilter</filter-name>
  9. <url-pattern>*</url-pattern>
  10. </filter-mapping>

过滤器代码

  1. package com.quickly.exception.common.filter;
  2.  
  3. import javax.servlet.*;
  4. import javax.servlet.http.HttpServletRequest;
  5. import java.io.IOException;
  6.  
  7. /**
  8. * 作用:Xss过滤器
  9. * 作者:Tiddler
  10. * 时间:2018/11/11 10:21
  11. * 类名: XssFilter
  12. **/
  13. public class XssFilter implements Filter {
  14. @Override
  15. public void init(FilterConfig filterConfig) throws ServletException {
  16.  
  17. }
  18.  
  19. @Override
  20. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
  21. //使用包装器
  22. XssFilterWrapper xssFilterWrapper=new XssFilterWrapper((HttpServletRequest) servletRequest);
  23. filterChain.doFilter(xssFilterWrapper,servletResponse);
  24. }
  25.  
  26. @Override
  27. public void destroy() {
  28.  
  29. }
  30. }

过滤器包装器代码

  1. package com.quickly.exception.common.filter;
  2.  
  3. import org.springframework.web.util.HtmlUtils;
  4.  
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletRequestWrapper;
  7.  
  8. /**
  9. * 作用:防Xss过滤器[包装器]
  10. * 作者:Tiddler
  11. * 时间:2018/11/11 10:20
  12. * 类名: XssFilterWrapper
  13. **/
  14. public class XssFilterWrapper extends HttpServletRequestWrapper {
  15. public XssFilterWrapper(HttpServletRequest request) {
  16. super(request);
  17. }
  18. /**
  19. * 对数组参数进行特殊字符过滤
  20. */
  21. @Override
  22. public String[] getParameterValues(String name) {
  23. if("content".equals(name)){//不想过滤的参数,此处content参数是 富文本内容
  24. return super.getParameterValues(name);
  25. }
  26. String[] values = super.getParameterValues(name);
  27. String[] newValues = new String[values.length];
  28. for (int i = 0; i < values.length; i++) {
  29. newValues[i] = HtmlUtils.htmlEscape(values[i]);//spring的HtmlUtils进行转义
  30. }
  31. return newValues;
  32. }
  33. }

总结:

主要是使用Java Web的过滤器,将所有的request请求参数修改(主要是把存在xss风险的标签转义,如:<script></script>),在转义时我没有自己实现替换与转义,是直接使用的spring自带的HtmlUtils类的htmlEscape方法转义的,方便很多

Java Web使用过滤器防止Xss攻击,解决Xss漏洞的更多相关文章

  1. XSS攻击解决办法 Spring mvc databinder

    XSS攻击解决办法 一.SpringMVC架构下@InitBinder方法 Controller方法的参数类型可以是基本类型,也可以是封装后的普通Java类型.若这个普通Java类型没有声明任何注解, ...

  2. Java Web之过滤器(Filter)

    转: Java Web之过滤器(Filter) 2018年07月31日 16:58:40 喻志强 阅读数 13705更多 所属专栏: Java Web入门   版权声明:本文为博主原创文章, 转载请注 ...

  3. [转]Java Web乱码过滤器

    本文转自http://blog.csdn.net/l271640625/article/details/6388690 大家都知道,在jsp里乱码是最让人讨厌的东西,有些乱码出来的莫名其妙,给开发带来 ...

  4. Java Web 中 过滤器与拦截器的区别

    过滤器,是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法u ...

  5. 初学Java Web(8)——过滤器和监听器

    什么是过滤器 过滤器就是 Servlet 的高级特性之一,就是一个具有拦截/过滤功能的一个东西,在生活中过滤器可以是香烟滤嘴,滤纸,净水器,空气净化器等,在 Web 中仅仅是一个实现了 Filter ...

  6. 【java web】过滤器filter

    一.过滤器简介 过滤器filter依赖于servlet容器 所谓过滤器顾名思义是用来过滤的,Java的过滤器能够为我们提供系统级别的过滤,也就是说,能过滤所有的web请求, 这一点,是拦截器无法做到的 ...

  7. 防XSS攻击解决方法

    1.web.xml文件中新增filter配置 <!-- URL请求参数字符过滤或合法性校验 --> <filter> <filter-name>XssFilter& ...

  8. Java Web(四) 过滤器Filter

    Filter概述 Filter意为滤镜或者过滤器,用于在Servlet之外对request或者response进行修改.Filter提出了过滤链的概念.一个FilterChain包括多个Filter. ...

  9. 【java web】过滤器、拦截器、监听器的区别

    一.对比: 1.1 过滤器和拦截器的区别: ①拦截器是基于java的反射机制的,而过滤器是基于函数回调. ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器. ③拦截器只能对actio ...

随机推荐

  1. python日志分割(转)

    按文件大小分割:RotatingFileHandler 按时间分割:TimedRotatingFileHandler import logging from logging.handlers impo ...

  2. Delphi用QJSON解析JSON格式的数据 【转】

    本来用superobject来解析JSON已经够用了,可惜这个东东不能在移动端使用,于是找到QJSON来处理. 这是一个国内高手写开源免费的东西,赞一个. 假入数据如下: {"message ...

  3. itop4412编译内核时出现“recipe for target 'arch/arm/mach-exynos/cpu-exynos4.o' failed”的解决方法

    依次执行如下命令 #su root 输入root用户密码 #cd #vim .bashrc 到达最底行,确保环境变量如下图所示 保存退出后,执行如下指令 #source .bashrc 重启Termi ...

  4. HDU 6045 - Is Derek lying | 2017 Multi-University Training Contest 2

    /* HDU 6045 - Is Derek lying [ 分析 ] 题意: 有N个问题, 每个问题有A,B,C三种答案,答对加一分,答错不加分 给出甲乙两人的答案,给出两人的分数先x, y,问分数 ...

  5. 微信公众号开发不能使用session原因

    今天做微信公众号开发整合功能的时候,使用session保存记录.用postman测试好使,但是一旦用手机就不好使.上网查了好久才明白,微信开发是不能用session的.具体原因如下:因为微信的所有请求 ...

  6. Ubuntu:系统信息查询

    造冰箱的大熊猫@cnblog 2018/3/14 1.查询系统信息(uname) uname命令返回与系统相关的信息,如下所示. $ uname -a Linux IBM-T60 4.13.0-36- ...

  7. Java进阶知识02 Struts2下的拦截器(interceptor)和 过滤器(Filter)

    一.拦截器 1.1.首先创建一个拦截器类 package com.bw.bms.interceptor; import com.opensymphony.xwork2.ActionContext; i ...

  8. #7 div2 B Layer Cake 造蛋糕 智商题+1

    B - Layer Cake Time Limit:6000MS     Memory Limit:524288KB     64bit IO Format:%I64d & %I64u Sub ...

  9. python随机生成库faker库api详解

    # -*- coding: utf-8 -*- # @Author : FELIX # @Date : 2018/6/30 9:49 from faker import Factory # zh_CN ...

  10. pymysql pymysql.err.OperationalError 1045 Access denied最简单解决办法

    我使用的是python3.6+pymysql+mysql8.0 在cmd命令行直接输入mysql回车出现:ERROR 1045 (28000): Access denied for user 'ODB ...