去除XSS字符串需要借助工具类 jsoup ,这里jsoup有一点需要注意的是,jsoup的功能可能有点太强大了,能把xss攻击的内容直接过滤掉了不说,也会对英文尖括号 <> 转义,到接口里面拿到的参数就变成了 <> ,存库里面的就是转义后的字符串了。取出来的时候需要转一下。
比如前台传的参数传的是: 12<>3<script>alter('11111111')</script>455
过滤处理了后,到后台接口里面就成了: [12<>3455]
如果上面的结果能接受,那么这个工具类就可以用。
引入依赖 jsoup
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.12.1</version>
</dependency>
复制代码
JsoupUtil.java 工具类:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.safety.Whitelist;
/**
*
* @Auther linmengmeng
* @Date 2021-08-19 15:47
*
* 描述: 过滤 HTML 标签中 XSS 代码
*/
public class JsoupUtil {
/**
* 使用自带的 basicWithImages 白名单
* 允许的便签有 a,b,blockquote,br,cite,code,dd,dl,dt,em,i,li,ol,p,pre,q,small,span,strike,strong,sub,sup,u,ul,img
* 以及 a 标签的 href,img 标签的 src,align,alt,height,width,title 属性
*/
private static final Whitelist whitelist = Whitelist.basicWithImages();
/** 配置过滤化参数, 不对代码进行格式化 */
private static final Document.OutputSettings outputSettings = new Document.OutputSettings().prettyPrint(false);
static {
// 富文本编辑时一些样式是使用 style 来进行实现的
// 比如红色字体 style="color:red;"
// 所以需要给所有标签添加 style 属性
whitelist.addAttributes(":all", "style");
}
public static String clean(String content) {
return Jsoup.clean(content, "", whitelist, outputSettings);
}
}
复制代码
首先是定义参数过滤器: ParamsFilter 实现 Filter 类
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
/**
* Description : 参数过滤器
*
*/
public class ParamsFilter implements Filter {
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
ParameterRequestWrapper parmsRequest = new ParameterRequestWrapper(
(HttpServletRequest) arg0);
arg2.doFilter(parmsRequest, arg1);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
@Override
public void destroy() {
}
}
复制代码
添加参数过滤配置文件:
import gc.cnnvd.framework.core.filter.ParamsFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.a