1. 前言
文件上传在日常开发中很常见,但潜在的安全问题很容易被忽视。这些问题一旦在开发中被忽视,就会导致系统安全漏洞。
2. 文件上传开发的安全建议
通常,我们上传的文件由客户端控制,这给了不善良的人一个机会。一些危险的可执行脚本可能会被注入服务器。因此,胖哥总结了以下建议。
过滤文件类型
开发人员应有一个过滤清单,允许上传的文件类型仅限于业务功能所需的文件类型。不允许列表过滤器,不得直接接受文件名及其扩展名,前端应说明清单。这是大多数开发人员做得很好的必要步骤。
处理文件名称
不能使用原始文件名!这是一个容易被忽视的问题。许多开发人员喜欢根据原始文件名直接转存上传文件。
这是不安全的。虽然大多数/\:<>?字符已经过滤掉了,但是. * % $,这些脚本中的常客仍然可以包含在文件名中,因此不能使用原始文件名。您应该指定一个算法来重新命名。建议使用摘要算法来确定文件名。例如,文件名可以是文件名和日期 MD5 哈希。
如果业务需要原始文件名称,可以存储新命名和原始名称的映射。
摘要校验
无论是上传、修改还是下载文件,服务端都需要进行摘要验证(MD5、SHA256),为防止文件与预设不一致。必要时还建议对客户端进行摘要验证。
限制大小
如果使用 Spring 进行开发的话已经做了限制,如果该限制不满足业务需要,可以修改,但是不能移除限制,否则会导致拒绝服务攻击。
访问限制
如果不是业务需要,只有身份验证和授权的用户才能使用文件上传功能。不然你的系统就成了别人的免费图床。
行为审计
对于安全,我们只能被动防御。因此,建议上传文件的操作有审计日志,审计日志不应受文件系统的影响,以便在发生安全事件时快速定位问题。
3. 总结
事实上,有很多安全要点需要考虑,但大多数都使用第三方存储,如果使用自主开发的系统,可能需要考虑更多。但对于普通的开发来说,这就足够了。
本文转载自微信公众号「 码农小胖哥」,可通过以下二维码关注。转载本文请联系农小胖哥微信官方账号。