本文目录一览:
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配置过滤器
2019-08-22/XSS过滤器
做后端的同学都知道,XSS过滤器,防sql注入过滤器等是常用的 。关于什么是XSS攻击,网上的说法很多,自己百度一下吧。我们只需要加入一个xss过滤器就可以了。但大部分的文章都是针对普通的get/post请求进行的参数xss过滤,如果是post+appliccation/json等提交方式就显得无能为力了。很显然,对于普通的get/post,就按照之前的方式过滤参数就可以了(对于multipart等文件上传之类的参数做校验,这里暂时没有提供)。
为了方便起见,首先定义一些常量吧:
接下来需要分别针对不同的表单提交类型写包装类,对于普通的get/post请求的包装类:
对于post+application/json的请求,对应的包装类:
接下来就是校验啦:
浏览器的Xss过滤器机制是什么,为什么有些反射型Xss不会触发过滤器
首先要说明的是 它是webkit的一个模块,而非chrome ,所以Safari和360安全浏览器极速模式等webkit内核的浏览器都有XSS过滤功能.
过滤方式:
通过模糊匹配 输入参数(GET query| POST form data| Location fragment ) 与 dom树,如果匹配中的数据中包含跨站脚本则不在输出到上下文DOM树中.另外,匹配的规则跟CSP没有什么关系,最多是有参考,CSP这种规范类的东西更新速度太慢跟不上现实问题的步伐.
关闭模式:
因为它有可能影响到业务,所以浏览器提供了关闭它的HTTP响应头.
X-XSS-Protection: 0
绕过方式:
因为专门做这方面的原因所以对绕过也有所了解,目前我发布过的一个bypass 0day还可以继续使用.
svgscript xlink:href=data:,alert(1)/script/svg
请教:xss打开的时候,css样式的过滤问题
为了安全,CI过滤掉那些东西了。你要允许只能自己去修改CI源码。