jfinal文件上传xss漏洞

詹总,你好!最近系统做安全扫描,出现了一个xss漏洞。

我使用XSSHttpHandler做了安全过滤

微信截图_20210207153704.png

但是目前有一个问题,如果是跟随文件上传的表单提交的参数,并不会进行参数的过滤。因此我进行了request请求类型的判断

如果是multipart/form-data类型的请求,重新封装request,

微信截图_20201231095617.png

但是依旧不起作用,想问问怎么处理呢?


--------------------------------------------------------------------------分割线----------------------------

经过研究代码发现了一些问题,不太清楚是不是分析的正确,请各位拍砖。

在普通表单post提交的时候,只要经过xss处理,就可以完成xss漏洞攻击。但是如果是文件上传类的表单提交后,request会被框架包装成MultipartRequest。下面是源码截图:

微信截图_20201231095617.png

微信截图_20201231095617.png

MultipartRequest中重写了几个必要方法,但是这几个方法并没有办法进行xss的过滤,会导致文件上传的地方存在xss漏洞的攻击。

微信截图_20201231095617.png

目前我系统中的上传表单的截图如下:

微信截图_20201231095617.png

如果将升级包名称中填入: <img src=1 onerror=alert(1)> ,肯定会出现xss攻击漏洞。

因此修改策略为,重写com.jfinal.upload.MultipartRequest类,将此类中几个方法进行xss过滤

微信截图_20201231095617.png

--------------------------------------------------------------------------2021.2.24追加----------------------

如果通过postman提交时,文件名称进行xss攻击,在回显文件名称的时候,就会出现xss漏洞。

微信截图_20210225084859.png


评论区

JFinal

2021-02-07 18:51

xss 有很多方法防止,我习惯于用 jsoup 在数据入库前过滤一下

当然,你也可以通过将原 request 包装一下

你的封装我觉得差不多了,可能还有一些方法没有过滤,打开 HttpServletRequest 源码,看看里面有什么方法可疑,然后再将这些方法也过滤一下

夕阳老贼

2021-02-08 10:54

@JFinal 上传确实存在xss安全漏洞,我认为应该是属于框架级别的。具体看我重新编辑的内容

夕阳老贼

2021-02-08 11:05

@JFinal 已经提供分析结果,詹总,看看是否存在上述的问题

夕阳老贼

2021-02-24 15:33

@JFinal 上面的修改,还是存在XSS漏洞,如果通过postman提交,文件名称格式是img src=1 onerror=alert(1).zip,还是会出现xss漏洞,目前的修改方法,可以看最后追加的内容。