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

时间:2021-09-22 20:38:19

转:

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方法转义的,方便很多