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


    转:

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

    版权声明:本文为博主原创文章,转载请注明出处!有时候也不是原创,手快就选了(我的文章随意转载复制,不在乎的哈!) 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方法转义的,方便很多

  • 相关阅读:
    题解 P5996 【[PA2014]Muzeum】
    题解 CF1433G 【Reducing Delivery Cost】
    题解 CF1430E 【String Reversal】
    题解 CF710F 【String Set Queries】
    题解 P4334 【[COI2007] Policija】
    LIS 树状数组优化
    离散化模板
    P4309 [TJOI2013]最长上升子序列
    p3902 递增(incr)
    poj3417 暗的连锁
  • 原文地址:https://www.cnblogs.com/libin6505/p/10996275.html
Copyright © 2020-2023  润新知