1. 前言

文件上传在日常开发中十分常见,但是潜在的安全问题非常容易忽视。一旦开发中忽视了这些问题,将会引发系统安全漏洞。

2. 文件上传开发的安全建议

通常我们上传的文件是由客户端控制的,这种情况下就给了不怀好意人可乘之机。一些危险的可执行脚本将有可能被注入服务器中去。因此胖哥总结了以下几点建议。

文件类型过滤

开发者应该有一个过滤清单允许上传的文件类型应仅限于业务功能所需的文件类型,在没有允许列表过滤器的情况下,切勿直接接受文件名及其扩展名,同时前端应该对该清单进行说明。这是一个必要的步骤,大多数开发者也做得很好。

文件名称处理

不能使用原始文件名!这是一个容易被忽略的问题。很多开发者喜欢直接把上传文件的按照原始文件名进行转存。

// Spring boot 开发中不建议使用这个来作为转存的名称,你应该生成一个新的名称来映射此名称
String originalFilename = MultipartFile.getOriginalFilename();

这样是不安全的。虽然大部分/\:<>?字符已经被过滤掉,但是. * % $,这些脚本中的常客依然可以被包含在文件名中,所以不能使用原始文件名,你应该指定一个算法来进行重命名,建议使用一种摘要算法来确定文件名。例如,文件名可以是文件名加上日期的 MD5 哈希。

如果业务需要原始文件名的话存储新的命名和原始名称的映射即可。

摘要校验

服务端无论上传、修改还是下载文件都需要进行摘要校验(MD5、SHA256),以防止文件和预设的不一致。客户端有必要的情况下也建议进行摘要校验。

限制大小

这一点如果使用 Spring 进行开发的话已经做了限制,如果该限制不满足业务需要,可以修改,但是不能移除限制,否则会导致拒绝服务***。

访问限制

如果不是业务需要,只有身份验证和授权的用户才能使用文件上传功能。不然你的系统就成了别人的免费图床。

行为审计

对于安全我们只能被动防御,因此对文件上传的操作建议有审计日志、而且审计日志不应该受文件系统影响,这样发生安全事件时可以快速定位问题。

3. 总结

其实还有不少的安全要点需要考虑,只不过目前大部分都使用了第三方存储,如果使用自研的系统可能需要考虑的更多。不过针对普通开发来说做到上面的几点就够了。

©著作权归作者所有:来自51CTO博客作者mob604756f80175的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 电商云应用框架
  2. Vue3+ElementPlus+Koa2 全栈开发后台系统
  3. SOA面向服务架构——SOA的概念
  4. 合约跟单系统开发方案【现成源码】
  5. 【完整版53章,附源码+电子书】Go+Python双语言混合开发-盯紧技术
  6. 智慧公安情报研判系统开发,重点人员可视化分析平台搭建
  7. 一些Java开发人员在编程中常见的雷!
  8. 什么是软件测试开发?为什么软件测试行业一夜之间爆火
  9. 狮虎论:软件测试和软件开发到底哪个实际工资更高

随机推荐

  1. android更新
  2. Cocos2d-x Lua实现从Android回调到Lua的
  3. 解决 Android SDK下载和更新失败“Connec
  4. Android 创建全局变量和Context
  5. Android引用资源(resources) vs 引用样式属
  6. Android 使用ADB命令安装、卸载软件
  7. TabHost—多种实现
  8. Android下编译自己的库文件jar并在应用中
  9. Android SDK更新的问题
  10. 最新android 应用源码下载