XssFilter使用记录

简介: xss意思是跨域网站攻击,这里不探讨xss的起源,单纯记录下xss在项目中的实际应用,xss防止javascrpts脚本注入类似于sql注入,项目中使用到了xssfilter所以记录在此

什么是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).

相关文章
|
运维 监控 测试技术
130 秒揭秘 EDAS 3.0 如何平滑应对突发流量高峰,为您的业务保驾护航
EDAS3.0的云原生架构是如何满足真实场景下的流控难题和单点故障引起的交易成功率下降的问题的?
9876 103
130 秒揭秘 EDAS 3.0 如何平滑应对突发流量高峰,为您的业务保驾护航
|
网络协议 Linux 数据库
【Cisco Packet Tracer】生成树协议STP的功能及虚拟局域网VLAN
【Cisco Packet Tracer】生成树协议STP的功能及虚拟局域网VLAN
384 0
|
前端开发
Layout布局实现一个简单的react管理后台
Layout布局实现一个简单的react管理后台
283 0
|
存储 人工智能 JSON
AI点燃体育热情— 在 PAI Artlab 创作你的奥运时刻!
为了向在赛场上的奥运健儿传递最真挚的鼓舞与喝彩,我们特此发起一场别开生面的“创意海报设计挑战”!在 Artlab 平台 ComfyUI 工具中,选择你心中的奥运项目,定制一张专属于你的奥运会加油海报!
|
SQL 运维 监控
MSSQL性能调优实战:索引策略优化、SQL查询重写与智能锁管理
在Microsoft SQL Server(MSSQL)的运维中,性能调优是确保数据库高效运行、满足业务需求的关键环节
|
监控 负载均衡 安全
思科无线 LAN 控制器(WLC)基本配置详解
【4月更文挑战第22天】
3028 2
思科无线 LAN 控制器(WLC)基本配置详解
|
安全 Java Linux
Could not connect to SMTP host: smtp.***.com, port: 465, response: -1
Could not connect to SMTP host: smtp.***.com, port: 465, response: -1
1097 0
|
存储 NoSQL 数据库
Oauth2协议中如何对accessToken进行校验
Oauth2协议中如何对accessToken进行校验
817 0
|
消息中间件 Java API
Flowable 7.0.0 release
Flowable 7.0.0 release
628 1
|
Web App开发 Java
velocity的html语义转换
1、velocity1.5版本默认不转换html 2、velocity1.6、1.7版本默认转换html 3、虽然转换后的html能够防止xss,但是,有时页面就是需要不转换的数据,如json字符串,可以通过#noescape()$!{data}#end即可
2046 0