什么是Xss
xss意思是跨域网站攻击,这里不探讨xss的起源,单纯记录下xss在项目中的实际应用,xss防止javascrpts脚本注入类似于sql注入,项目中使用到了xssfilter所以记录在此
XssFilter这个过滤器到底过滤什么
具体过滤什么无非就是httpservletrequest中的请求参数所携带的信息,网站所接收的请求里包含的信息并不明确,在被攻击的情况下可能会携带很多恶意信息,对网站的攻击,所以一个安全的网站xss这块是必须要处理的。
1.写一个自己的XssFilter:加入注释@WebFilter,给参数filtername与urlpatterns 进行赋值,第一处的filtername应该没啥用,因为在boot的启动类上添加@ServletComponentScan注解后可以将所有的servlet、filter、listener全部注入到ioc容器中(毕竟三者本质都是servlet)。第二处的urlpatterns就很重要了,这里配置拦截的地址,/* 代表拦截所有请求,但是很多的静态资源访问其实并不需要拦截。
2.去除静态资源的拦截:
String[] exclusionsUrls = {".js",".gif",".jpg",".png",".css",".ico"}; for (String str : exclusionsUrls) { if (path.contains(str)) { exclusionsUrls = null; filterChain.doFilter(servletRequest,servletResponse); return; } }
3.**其他资源的请求自然都会被XssFiter过滤掉,自定义一个XssHttpServletRequestWraper,继承自HttpServletRequestWraper,在这里重写HttpServletRequst的各种方法,用于对请求参数的过滤。
filterChain.doFilter(new XssHttpServletRequestWrapper(request),servletResponse);
@Override public String getHeader(String name) { return XssFilterUtil.filterString(super.getHeader(name)); } @Override public String getQueryString() { return XssFilterUtil.filterString(super.getQueryString()); } @Override public String getParameter(String name) { return XssFilterUtil.filterString(super.getParameter(name)); }
@Override public String getHeader(String name) { return XssFilterUtil.filterString(super.getHeader(name)); } @Override public String getQueryString() { return XssFilterUtil.filterString(super.getQueryString()); } @Override public String getParameter(String name) { return XssFilterUtil.filterString(super.getParameter(name)); }
以上就是对请求参数的各种过滤,总结一句话就是对可能造成安全隐患的字符进行替代成*,-,#,等。2020-07生产出现过一次类似的问题,在所有的文件信息中本应存入文件下载所需的downloadId,结果存储的是一个json串,这里的"已经被XssFilter过滤成了$qt).