轉:
Java Web使用過濾器防止Xss攻擊,解決Xss漏洞
版權聲明:本文為博主原創文章,轉載請注明出處!有時候也不是原創,手快就選了(我的文章隨意轉載復制,不在乎的哈!) https://blog.csdn.net/qq_31384551/article/details/83956681
web.xml添加過濾器
-
<!-- 解決xss漏洞 -->
-
<filter>
-
<filter-name>xssFilter</filter-name>
-
<filter-class>com.quickly.exception.common.filter.XssFilter</filter-class>
-
</filter>
-
<!-- 解決xss漏洞 -->
-
<filter-mapping>
-
<filter-name>xssFilter</filter-name>
-
<url-pattern>*</url-pattern>
-
</filter-mapping>
過濾器代碼
-
package com.quickly.exception.common.filter;
-
-
import javax.servlet.*;
-
import javax.servlet.http.HttpServletRequest;
-
import java.io.IOException;
-
-
/**
-
* 作用:Xss過濾器
-
* 作者:Tiddler
-
* 時間:2018/11/11 10:21
-
* 類名: XssFilter
-
**/
-
public class XssFilter implements Filter {
-
-
public void init(FilterConfig filterConfig) throws ServletException {
-
-
}
-
-
-
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
-
//使用包裝器
-
XssFilterWrapper xssFilterWrapper= new XssFilterWrapper((HttpServletRequest) servletRequest);
-
filterChain.doFilter(xssFilterWrapper,servletResponse);
-
}
-
-
-
public void destroy() {
-
-
}
-
}
過濾器包裝器代碼
-
package com.quickly.exception.common.filter;
-
-
import org.springframework.web.util.HtmlUtils;
-
-
import javax.servlet.http.HttpServletRequest;
-
import javax.servlet.http.HttpServletRequestWrapper;
-
-
/**
-
* 作用:防Xss過濾器[包裝器]
-
* 作者:Tiddler
-
* 時間:2018/11/11 10:20
-
* 類名: XssFilterWrapper
-
**/
-
public class XssFilterWrapper extends HttpServletRequestWrapper {
-
public XssFilterWrapper(HttpServletRequest request) {
-
super(request);
-
}
-
/**
-
* 對數組參數進行特殊字符過濾
-
*/
-
-
public String[] getParameterValues(String name) {
-
if("content".equals(name)){//不想過濾的參數,此處content參數是 富文本內容
-
return super.getParameterValues(name);
-
}
-
String[] values = super.getParameterValues(name);
-
String[] newValues = new String[values.length];
-
for (int i = 0; i < values.length; i++) {
-
newValues[i] = HtmlUtils.htmlEscape(values[i]); //spring的HtmlUtils進行轉義
-
}
-
return newValues;
-
}
-
}
總結:
主要是使用Java Web的過濾器,將所有的request請求參數修改(主要是把存在xss風險的標簽轉義,如:<script></script>),在轉義時我沒有自己實現替換與轉義,是直接使用的spring自帶的HtmlUtils類的htmlEscape方法轉義的,方便很多