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方法轉義的,方便很多


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM