本文目录一览:
- 1、45. 从零开始学springboot撸一个Xss过滤器-注解实现
- 2、XSS(跨站脚本漏洞)谁帮忙修复下,我看着就头大,一窍不通啊。
- 3、2019-08-22/XSS过滤器
- 4、XSS过滤器
- 5、XSS是指什么
- 6、【快学springboot】15、SpringBoot过滤XSS脚本攻击
45. 从零开始学springboot撸一个Xss过滤器-注解实现
上章通过Filter实现了Xss全局过滤器
可能小伙伴还有点不满, 全局意味着“一刀切”,
虽然我们也有白名单黑名单设置, 但是, 白名单黑名单针对的是整个方法或整个实体类
举个例枣游子, 我定义了个实体
可能业务上有限制悉或(比如name限制了只有5个字符长),
那么name其实不可能存在Xss注入风险了,
程序只需要对info和des属性做转义即可
如果采用Filter, 意味着People的所有属性都会检测转义, 好像没啥必要!
那么, 可以针对性的指定字段进行Xss的过滤转义么?
为了应对这样的需求, 咸鱼君采用Aop注解来实现这么个Xss过滤器.
PS: 和Filter一样, 我们统一对入参Xss过滤, 确保参数的处理方式统一! 所以, 程序中获取的参数值都是转义后的数据!!
废话不多说, 往下看!
加入必要的睁岩伍pom依赖
针对方法, 参数, 属性分别定义三个注解
XssMethod
XssParam
XssField
针对注解实现切面Aspect
XssAspect
注释写的很详细, 就不多废话了!
接下来我们写个案例来测试测试
首先在启动类上启用切面
定义一个实体People, 并对info,des属性加上注解进行xss过滤
最后编写controller
json方式
键值对方式
XSS(跨站脚本漏洞)谁帮忙修复下,我看着就头大,一窍不通啊。
对于php你可以用htmlentities()函数
例如这样:
?php
echo htmlentities($_POST['abc']);
?
至于asp,租念颂默认弊郑就能防xss攻击高液,无需任何操作
2019-08-22/XSS过滤器
做后端的同学中镇皮都知道,XSS过滤器,防sql注入过滤器等是常用的 。关于什么是XSS攻击,网上的说法很多,自己百度一下吧。我们只需要加入一个xss过滤器就可以了。但大部分的文章都是针对普通的get/post请求进行的参数xss过滤,如果是post+appliccation/json等提交方式就显得无能为力了。很显然,对于普通的get/post,就按照之前的方式过滤参卖差数就可以了(对于multipart等文件上传之类的参数做校验,这里暂时没有提供)。
为了方便起见,首先定义一些常量吧:
接下来需要分别针对不同的表单提交类型写包装类,对于普通的get/post请求的包装类:
对于post+application/json的请求,对应的包装类旅岩:
接下来就是校验啦:
XSS过滤器
背景:过滤xss攻击,同时将过滤后的日志输出到指定文件。(指定文件输则没出请看上篇博文)
前景:利用filter进行xss攻击过滤,需要应对不同请求做不同的过滤处理,若是post请求的json格式数据,需要重写getinputstream方法(因为流读取一次后,下层controller无法再次进行读取。原理可自行百度)
因此需要重写两个wrapper(继承HttpServletRequestWrapper)(针对post的json请求以及其他格式的请求)
在filter中以contentType做类型的区分
未做业务耦合的区分(日志输出与xss过滤耦合到一起),若要区分开功能,单独书写即可
一:重写wrapper
1:contentType为multipart/form-data或application/x-www-form-urlencoded
2:contentType为application/json
二:xss处理工陆升具方早盯老法:
三:filter过滤器
四:在web.xml配置过滤器
XSS是指什么
恶意攻击蔽友陪者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。什么是XSS攻击XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的宏蠢是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常忽略其危害性。而本文主要讲的是利用XSS得到目标服务器的shell。技术虽然是老技术告巧,但是其思路希望对大家有帮助。
【快学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代码已经经租笑过转义。转义过后的代码,即使前端读取过去了,也不会被浏览器执行的。