xss漏洞修复踩坑总结
一、前言
最近测试发现系统某个接口有个xss漏洞,比如,保存数据入库时,会把<a>
标签保存入库;然后查看列表时,会把<a>
标签显示出来;
说是这个漏洞可以构建恶意链接,点击会跳转到恶意网址,让修复掉。
二、修复方法:前端修复
这个问题之前也遇到过,于是就按照之前的修复方法,让前端加一个xss.js,过滤掉不合法的标签后,再把数据传给后台。
谁知道这次不行了,测试直接抓包,用postman直接给后台发送含有<a>
标签的请求,结果又存入数据库了。
如果从前端输入含有<a>
标签的请求,点击保存,那样前端就会用xss.js把<a>
标签过滤后发给后台,是没有问题的;
但是如果抓包,直接给后台发请求,那还是存在xss.js漏洞。(而且抓包测试过分了吧,那样好多系统岂不是都有漏洞了)
三、修复方法:后端修复(springboot项目)
为了符合要求,准备在后端Controller处增加过滤器,判断,如果请求报文中的参数含有不合法标签(<a>
标签等),就过滤掉这个请求,不继续处理,返回错误信息。
结果踩了一堆坑,才好不容易弄好。
先发下修复流程:
1.先写一个全局过滤器(/*),用来让HttpServletRequest.getInputStream()获取的流可以重复读取,可以参考下面的文章:
https://blog.51cto.com/u_3664660/3212696
2.再写一个拦截器,拦截指定url(/save),就是保存数据库的那个url:
这个拦截器中,会使用HttpServletRequest.getInputStream()
获取请求体内容(json传递的数据,就需要这样获取);
也会使用request.getParameterNames().hasMoreElements()
、request.getParameter(request.getParameterNames().nextElement())
等方法,获取key-value传参中的所有value;
然后用方法pattern.matcher(value).find()
匹配这些参数,如果符合匹配条件,就拦截这条请求,不继续处理,返回错误信息;
匹配规则样例为:
Pattern pattern = Pattern.compile("(?:')|(?:--)|(/\\*(?:.|[\\n\\r])*?\\*/)|(\\b(select|update|union|and|or|delete|insert|truncate|char|into|substr|ascii|declare|exec|count|master|drop|execute)\\b)|(<a)|(<abbr)|(<address)|(<area)|(<article)|(<aside)|(<audio)|(<b)|(<bdi)|(<bdo)|(<big)|(<blockquote)|(<br)|(<caption)|(<center)|(<cite)|(<code)|(<col)|(<colgroup)|(<dd)|(<del)|(<details)|(<div)|(<dl)|(<dt)|(<em)|(<figcaption)|(<figure)|(<font)|(<footer)|(<h1)|(<h2)|(<h3)|(<h4)|(<h5)|(<h6)|(<header)|(<hr)|(<i)|(<img)|(<ins)|(<li)|(<mark)|(<nav)|(<ol)|(<p)|(<pre)|(<s)|(<section)|(<small)|(<span)|(<sub)|(<summary)|(<sup)|(<strong)|(<strike)|(<table)|(<tbody)|(<td)|(<tfoot)|(<th)|(<thead)|(<tr)|(<tt)|(<u)|(<ul)|(<video)", 2);
这个规则是本人根据xss.js写的,意思是,如果请求数据中包含了这些非法标签,就拦截掉,返回错误信息,不让这些数据保存入数据库。
可以参考这个文章:https://blog.csdn.net/meser88/article/details/121211112
四、踩坑记录
修复方法按照上面的后端修复就没什么问题了,下面记录下踩过的坑。
1.@WebFilter和@Component一起使用导致urlPatterns不起作用
本来最开始是想写个过滤器过滤指定url的,结果发现这个过滤器过滤了所有路径的url;
后来才发现@WebFilter和@Component不能一起用,应该在过滤器里用@WebFilter
,在启动类Application.java里用@ServletComponentScan
去扫描那个过滤器才对。
可以参考这篇文章:https://blog.csdn.net/weixin_38152047/article/details/121244269
2.httpServletRequest.getInputStream()不能重复读取的坑
为了判断请求数据(json)是否包含非法标签,只能把流读取出来再判断;
可是在过滤器/拦截器里读取完流后,发现流没有问题、放行给Controller时,就会报错:流不能再次读取。
百度了好多方法,有给流设置mark()与reset()的,不过请求流不支持这样;
最后还是用了一个全局过滤器,封装了个HttpServletRequestWrapper类解决的。
可以参考这篇文章:https://blog.51cto.com/u_3664660/3212696
3.正则表达式拦截非法标签的坑
这个其实是个小坑;刚开始本人准备拦截<a>
这样的;
后来才想到,这样不行,a标签里面是有参数的;
因此改为了拦截<a
这样的,只要报文里匹配到这个,就拦截掉。
xss漏洞修复踩坑总结相关推荐
- Web安全原理剖析(十八)——XSS平台及漏洞修复建议
目录 5.2 使用XSS平台测试XSS漏洞 5.3 XSS漏洞修复建议 5.2 使用XSS平台测试XSS漏洞 XSS平台可自行本地搭建或使用在线平台. 首先在XSS平台注册账号并登录,单击&q ...
- XSS漏洞原理和利用
XSS漏洞原理和利用 XSS漏洞的危害 1.窃取用户Cookie,如果用户Cookie被窃取,攻击者可以不通过密码,而直接登录用户账户 2.使用XMLHttpRequest构造模拟用户请求操作 3.X ...
- 开源工具 PrivateBin 修复XSS 漏洞
聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 PrivateBin 是热门 ZeroBin 的一个分叉,它是一款在线工具,用于存储信息并通过 256位 AES 在浏览器中加密/解密,即服务器 ...
- 速修复!开源编辑器CKEditor 中存在两个严重XSS漏洞,影响Drupal 和其它下游应用...
聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 专栏·供应链安全 数字化时代,软件无处不在.软件如同社会中的"虚拟人",已经成为支撑社会正常运转的最基本元素之一,软件的安全 ...
- 开源内容管理系统Drupal 修复信息泄露和 XSS 漏洞
聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 本周,开源的内容管理系统 Drupal 修复了多个信息泄露和跨站点脚本 (XSS) 漏洞,其中包括一个"严重"级别 ...
- Drupal 更新开源编辑器 CKEditor,修复两个 XSS 漏洞
聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 本周三,Drupal 内容管理系统开发人员宣布称更新了版本8.8.x和8.7.x,解决了影响 CKEditor 库的多个漏洞. CKE ...
- XSS安全漏洞修复解决方案
背景:等保测评公司针对我系统进行了一次渗透测试,并发现存在XSS漏洞,现记录修复过程. 框架:SSM. 全站XSS: 漏洞风险等级:中危 涉及页面:全站存在内容输入处 漏洞描述:所有模块可以修改内容处 ...
- Vue 踩坑笔记: 引入 ElementUI 时打包失败修复记录(ERROR in ./node_modules/element-ui/lib/theme-chalk/index.css)
Vue 踩坑笔记: 引入 ElementUI 时打包失败修复记录(ERROR in ./node_modules/element-ui/lib/theme-chalk/index.css Module ...
- XSS漏洞及修复方案
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序.这些恶意网页程序通常是JavaScript,但实际上也可以包括Java ...
最新文章
- oracle数据导出方法,oracle多种导入导出数据方法
- python语言入门教程-Python语言十分钟快速入门
- mysql 二进制日志详解_Mysql二进制日志详解
- 无监督和有监督的区别_无监督元学习(Unsupervised Meta-Learning)
- JAVA Stack栈和Heap堆的区别(转)
- python列表转字节_如何在Python中将十进制数转换为字节列表
- 第16课 开灯关灯 《小学生C++趣味编程》
- python编程胡牌将是什么意思_python麻将和牌算法
- FPGA 串口中断_一个严谨的STM32串口DMA发送amp;接收(1.5Mbps波特率)机制
- NCBI引物设计-查找目的基因前后序列方法、序列比对
- android管理交换机,用手机android超级终端 如何开启交换机端口
- 计算机一级考试题产品销售情况表,Excel案例(十二)——销售统计表
- 微信小程序wx.createInnerAudioContext使用方法
- CSDN不友好的收藏夹
- 知识欠缺到沙漠化了吧
- 阿里云SSL数字证书Nginx配置部署
- Java学习路线!Javacad二次开发
- FE内容付费系统响应式(带手机版) v5.46
- 程序员常见700单词
- 软件ios软件测试,【松勤软件测试】ios app测试注意地方