㈠ java服务接口怎么避免xss注入攻击
过滤特定符号
publicstaticStringguolv(Stringa){
a=a.replaceAll("%22","");
a=a.replaceAll("%27","");
a=a.replaceAll("%3E","");
a=a.replaceAll("%3e","");
a=a.replaceAll("%3C","");
a=a.replaceAll("%3c","");
a=a.replaceAll("<","");
a=a.replaceAll(">","");
a=a.replaceAll(""","");
a=a.replaceAll("'","");
a=a.replaceAll("\+","");
a=a.replaceAll("\(","");
a=a.replaceAll("\)","");
a=a.replaceAll("and","");
a=a.replaceAll("or","");
a=a.replaceAll("1=1","");
returna;
}
㈡ 【快学springboot】15、SpringBoot过滤XSS脚本攻击
XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。
简而言之,就是作恶用户通过表单提交一些前端代码,如果不做处理的话,这些前端代码将会在展示的时候被浏览器执行。
解决XSS攻击,可以通过后端对输入的数据做过滤或者转义,使XSS攻击代码失效。
对于过滤XSS脚本的代码,通过搜索引擎可以搜索到很多,但似乎都不是那么全面。基本上都是只能过滤querystring(表单类型)类型的入参,而不能过滤json类型的入参。其实,在现在的开发中,更多的是使用json类型做数据交互。下面就直接贴代码了:
这里重写了两个方法:getParameter和getParameterValues,getParameter方法是直接通过request获得querystring类型的入参调用的方法。如果是通过springMVC注解类型来获得参数的话,走的是getParameterValues的方法。大家可以通过打印一个输出来验证一下。
StringEscapeUtils.escapeHtml4这个方法来自Apache的工具类,maven坐标如下:
过滤的代码写完了,下面就是在一个filter中应用该代码。
过滤表单类型的代码已经完成(xssObjectMapper这个是后面过滤json类型才用到的)。下面来实现过滤json类型的代码:
代码如下:
这里是通过修改SpringMVC的json序列化来达到过滤xss的目的的。其实也可以通过第一种方法,重写getInputStream方法来实现,这里我就不做演示了(通过json类型传参会走getInputStream方法,通过重写该方法打印输出可以证明)。
TestController.java
下面通过postman测试下效果:
可以看到,js代码已经经过转义。转义过后的代码,即使前端读取过去了,也不会被浏览器执行的。
㈢ spring过滤器和拦截器的区别
(1)过滤器:
依赖于servlet容器,是JavaEE标准,是在请求进入容器之后,还未进入Servlet之前进行预处理,并且在请求结束返回给前端这之间进行后期处理。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要获取的数据,比如:在过滤器中修改字符编码;在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等
关于过滤器的一些用法可以参考我写过的这些文章:
继承HttpServletRequestWrapper以实现在Filter中修改HttpServletRequest的参数:
在SpringMVC中使用过滤器(Filter)过滤容易引发XSS的危险字符:
(2)拦截器:
拦截器不依赖与servlet容器,依赖于web框架,在SpringMVC中就是依赖于SpringMVC框架。在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。由于拦截器是基于web框架的调用,因此可以使用spring的依赖注入(DI)获取IOC容器中的各个bean,进行一些业务操作,同时一个拦截器实例在一个controller生命周期之内可以多次调用。但是缺点是只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理,拦截器功在对请求权限鉴定方面确实很有用处