maven依賴
點擊查看代碼
<!-- 防xss攻擊 -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.2</version>
</dependency>
攔截修改請求字段工具類
點擊查看代碼
/**
* @Description: xss非法標簽過濾
*/
public class XssFilterUtil {
public static String clean(String content) {
return Jsoup.clean(content, Whitelist.none());
}
}
包裝類
點擊查看代碼
/**
* @Description: 使用HttpServletRequestWrapper重新封裝request參數
*/
public class XSSRequestWrapper extends HttpServletRequestWrapper {
/**
* 構造方法
*/
public XSSRequestWrapper(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] = dealString(values[i]);
}
return encodedValues;
}
@Override
public String getParameter(String parameter) {
String value = super.getParameter(parameter);
return dealString(value);
}
@Override
public String getHeader(String name) {
String value = super.getHeader(name);
return dealString(value);
}
/**
* 字符串處理
*/
private String dealString(String value) {
if (value != null) {
// 采用spring的StringEscapeUtils工具類 實現
value = XssFilterUtil.clean(value);
}
return value;
}
}
XSS過濾器
點擊查看代碼
/**
* @Description: 攔截防止注入漏洞(即防止XSS的跨站腳本攻擊)
*/
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 servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
filterChain.doFilter(new XssHttpServletRequestWrapper((HttpServletRequest) servletRequest), servletResponse);
}
@Override
public void destroy() {
this.filterConfig = null;
}
}
配置過濾器生效地址
點擊查看代碼
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean XssFilter() {
FilterRegistrationBean registration = new FilterRegistrationBean(new XssFilter());
registration.addUrlPatterns("/*");
return registration;
}
}