zoukankan      html  css  js  c++  java
  • 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方法转义的,方便很多

  • 相关阅读:
    vue自动路由-单页面项目(非build时构建)
    建立多页面vue.js项目
    C#调用C++(QT5.5.1项目)的C++/CLI(CLR项目)项目技术笔记
    自建Socket转发,使用远程桌面(mstsc)连接家中电脑
    用Vue.js搭建一个小说阅读网站
    在CentOS中部署.Net Core2.1网站
    高价值干货:这可能是你见过最全的网络爬虫总结
    【DevCloud·敏捷智库】如何利用用户故事了解需求
    项目管理:如何显性管理并提升Story分解能力
    【API进阶之路】老板给我涨薪30%!如何通过SDK接口搞定千万级流量直播
  • 原文地址:https://www.cnblogs.com/libin6505/p/10996275.html
Copyright © 2011-2022 走看看