diff --git a/pom.xml b/pom.xml index 3018816..494efcb 100644 --- a/pom.xml +++ b/pom.xml @@ -44,6 +44,12 @@ spring-boot-starter-test test + + + org.apache.commons + commons-lang3 + 3.7 + mysql diff --git a/src/main/java/com/xwolf/boot/interceptor/XSSFilter.java b/src/main/java/com/xwolf/boot/interceptor/XSSFilter.java new file mode 100644 index 0000000..5eb5ce6 --- /dev/null +++ b/src/main/java/com/xwolf/boot/interceptor/XSSFilter.java @@ -0,0 +1,29 @@ +package com.xwolf.boot.interceptor; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; + +/** + * @author xwolf + * @since 1.8 + */ +public class XSSFilter implements Filter { + + private FilterConfig filterConfig = null; + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + this.filterConfig = filterConfig; + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + chain.doFilter(new XSSHttpServletRequestWrapper((HttpServletRequest) request), response); + } + + @Override + public void destroy() { + this.filterConfig = null; + } +} diff --git a/src/main/java/com/xwolf/boot/interceptor/XSSHttpServletRequestWrapper.java b/src/main/java/com/xwolf/boot/interceptor/XSSHttpServletRequestWrapper.java new file mode 100644 index 0000000..2220196 --- /dev/null +++ b/src/main/java/com/xwolf/boot/interceptor/XSSHttpServletRequestWrapper.java @@ -0,0 +1,57 @@ +package com.xwolf.boot.interceptor; + + +import org.apache.commons.lang3.StringEscapeUtils; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; + +/** + * XSS 过滤 + * @author xwolf + * @since 1.8 + */ +public class XSSHttpServletRequestWrapper extends HttpServletRequestWrapper { + /** + * Constructs a request object wrapping the given request. + * + * @param request + * @throws IllegalArgumentException if the request is null + */ + public XSSHttpServletRequestWrapper(HttpServletRequest request) { + super(request); + } + + @Override + public String[] getParameterValues(String parameter) { + String[] values = super.getParameterValues(parameter); + if (values==null) { + return null; + } + int count = values.length; + String[] encodedValues = new String[count]; + for (int i = 0; i < count; i++) { + encodedValues[i] = StringEscapeUtils.escapeHtml4(values[i]).replace("'","''"); + } + return encodedValues; + } + @Override + public String getParameter(String parameter) { + String value = super.getParameter(parameter); + if (value == null) { + return null; + } + return StringEscapeUtils.escapeHtml4(value).replace("'","''"); + } + @Override + public String getHeader(String name) { + String value = super.getHeader(name); + if (value == null) { + return null; + } + + return StringEscapeUtils.escapeHtml4(value).replace("'","''"); + } + + +}