MultipartRequest 能否去掉文件上传添加白名单机制,由业务自己判断

升级5.2.3后,上传我看新增了白名单机制,这个能否去掉,由我们自己业务控制~

评论区

布恩迪亚

2024-11-22 11:45

UploadConfig 有增加和删除白名单的方法来着

JFinal

2024-11-22 14:09

白名单、黑单名提供了配置,可以自行控制,删除所有白名单就相当于让位于你业务自己控制

caoyuan1

2024-11-22 14:58

@JFinal 有些上传附件后,文件名是没有后缀的。导致无法判断。

caoyuan1

2024-11-22 14:59

@布恩迪亚 我知道这个,但是还是无法达到我的要求

caoyuan1

2024-11-22 15:03

@JFinal 比如我前端有提供那种js手动对图片进行截取等,操作完成后上传后台是没有后缀的,所以导致我无法用UploadConfig进行白名单控制,再者对原有的项目如果有的没有手动添加白名单,就会导致原有项目更新后出错。

happyboy

2024-11-24 00:44

方案一:先别升级,主打一个够用就行,比如我现在就还再用很古老的版本。方案二:查源代码,自己调整下。^_^

杜福忠

2024-11-24 10:45

方案三:前端使用FormData对象进行上传,
formData.append(name, value, filename)
比如 formData.append('file', blob, 'your_file_name.jpg');
这样就兼容了后端的表单文件上传模式了

caoyuan1

2024-11-24 11:27

@JFinal 看了一下代码,删除所有白名单就无法上传所有文件了,这里应该需要判断下,白名单为空就应该放行。MultipartRequest isSafeFile方法 ,如果whitelist size为0,也应该返回true

caoyuan1

2024-11-24 11:27

@杜福忠 这个确实能解决我的问题,感谢!

JFinal

2024-11-24 12:46

@caoyuan1 是否还需要这个:
if (UploadConfig.whitelist.contains(extName)) {
return true;
}

改为 :

if (UploadConfig.whitelist.contains(extName) || UploadConfig.whitelist.isEmpty()) {
return true;
}

这样全部放行了,安全性就降低了,现在绝大部分对 java 系统的攻击集中在文件上传 + sql 注入

caoyuan1

2024-11-24 19:59

@JFinal 目前我已经改好了,我们也很注重上传这块,也专门有上传检验,作为框架,我觉得这个白名单可以让业务系统自己控制。

zzutligang

2024-11-29 15:56

@JFinal 提到sql注入,有没有好的解决方案?或则jfinal提供一个预防sql注入的功能?最近被sql注入搞的头大。

JFinal

2024-11-29 17:06

@zzutligang 只要你不将参数拼接到 sql 就没问题,这里的参数指:字段名、表名、参数值等等一切拼接成 String sql 语句的部分

杜福忠

2024-11-29 21:37

@zzutligang 有些业务必须用到 前端参数拼接的话,就用 map 做一个静态的全局白名单(表名、字段、条件等等参数均可,包括 sql 片段都可以放)。键值一样才行,用前端参数做 key 取 map 的value 值拼接到 sql 中。 奇安信安全源码扫码可通过,只做 if 判断,扫描器还过不了。要用 value值做拼接的对象就没问题。可过等保

zzutligang

2024-12-05 11:29

@JFinal @杜福忠 历史原因,遗留下的代码有不少是拼接字符串的sql,导致现在比较被动的局面。不过幸好,我们几乎没有遇到form表单里需要填select,delete,drop,union等这样的sql语句的关键字单词。所以,我暂时做了个拦截器,把这些关键词拦截了。然后后面慢慢改吧。并且也已经要求后面产生的新代码,不允许拼接字符串了。要么用sql模板文件,要么用SqlPara,最简单的就是用把条件用?占位符。现在我们的系统已经过等保2级了。

热门分享

扫码入社