背景
之前公司信息安全部门对公司项目进行网络安全升级时,发现项目里可能会出现XSS脚本攻击漏洞,所以就需要对其参数进行过滤拦截。
XSS
百度百科:XSS攻击全称:cross site scripting(这里是为了和CSS区分,所以叫XSS),跨站脚本攻击(XSS),是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。攻击者可以使用户在浏览器中执行其预定义的恶意脚本,其导致的危害可想而知,如劫持用户会话,插入恶意内容、重定向用户、使用恶意软件劫持用户浏览器、繁殖XSS蠕虫,甚至破坏网站、修改路由器配置信息等。
xss漏洞攻击分为三种:
反射性XSS攻击 :前端在发送请求时,在url参数里携带一些脚本命令,然后等服务端把脚本在反射给浏览器执行脚本代码,进行XSS漏洞攻击
存储性XSS攻击 :和反射性XSS漏洞攻击相似,但是服务器会进行持久化保存脚本命令,后续用户访问该数据时持久性进行XSS漏洞攻击
DOS性XSS攻击 :和服务端没有交互,靠浏览器的DOM解析进行XSS攻击
Java过滤
预防XSS漏洞攻击除了web端进行解析过滤外,也还需要服务端进行校验过滤
本次使用springboot项目中过滤器进行对前端传来的参数进行过滤拦截
/**
* springboot注册过滤器
*
* @author: zrh
* @date: 2021-11-17
*/
@Configuration
public class XssFilterConfig {
@Bean
public FilterRegistrationBean xssFilterRegistrationBean () {
FilterRegistrationBean initXssFilterBean = new FilterRegistrationBean();
// 设置自定义过滤器
initXssFilterBean.setFilter(new XssFilter());
// 设置优先级(值越低,优先级越高)
initXssFilterBean.setOrder(1);
// 设置过滤路径
initXssFilterBean.addUrlPatterns("/*");
// 设置过滤器名称
initXssFilterBean.setName("XSS_filter");
// 设置过滤器作用范围(可以配置多种,这里指定过滤请求资源)
initXssFilterBean.setDispatcherTypes(DispatcherType.REQUEST);
return initXssFilterBean;
}
}
spring项目中可以使用web.xml定义过滤器,springboot中没有web.xml配置文件,那么就可以使用FilterRegistrationBean类把过滤器实例注册到容器
/**
* 自定义过滤器
*
* @author: zrh
* @date: 2021-11-17
*/
@Slf4j
public class XssFilter implements Filter {
@Override
public void init (FilterConfig filterConfig) {
// 初始化调用
}
@Override
public void doFilter (ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
final XssHttpServletRequestWrapper requestWrapper = new XssHttpServletRequestWrapper((HttpServletRequest) servletRequest);