学习springboot15和springboot过滤XSS脚本攻击。

XSS攻击的全称是跨站脚本攻击,不要和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆。因此,跨站脚本攻击简称为XSS。XSS是web应用程序中的一个计算机安全漏洞,它允许恶意web用户将代码植入提供给其他用户的页面中。

简而言之,邪恶的用户通过表单提交一些前端代码,如果不处理,这些前端代码在显示的时候就会被浏览器执行。

要解决XSS攻击,可以通过后端过滤或转义输入数据,使XSS攻击代码失效。

搜索引擎可以搜索到许多过滤XSS脚本的代码,但似乎没有一个是如此全面的。基本上只能过滤querystring (form type)类型参数,不能过滤json类型参数。其实在目前的开发中,json类型更多的是用于数据交互。让我们将代码直接粘贴到下面:

这里重写了两个方法:getParameter和getParameterValues。getParameter方法是通过request直接获取querystring类型的参数调用的方法。如果参数是通过springMVC的注释类型获取的,则取getParameterValues的方法。您可以通过打印输出来验证它。

StringEscapeUtils.escapeHtml4这个方法来自Apache的tool类,maven坐标如下:

过滤的代码完成了。下面是如何在过滤器中应用代码。

过滤表单类型的代码已经完成(xssObjectMapper稍后用于过滤json类型)。让我们实现过滤json类型的代码:

代码如下:

这里通过修改SpringMVC的json序列化来达到过滤xss的目的。其实也可以通过重写第一个方法中的getInputStream方法来实现,这里就不做演示了(可以通过json类型重写getInputStream方法的打印输出来证明)。

TestController.java

让我们通过postman测试一下效果:

如您所见,js代码已经被转义。转义后的代码即使被前端读取,也不会被浏览器执行。