1。Preface文件上传在日常开发中很常见,但潜在的安全问题却很容易被忽视。一旦在开发中忽视了这些问题,就会导致系统出现安全漏洞。2.文件上传开发的安全建议通常我们上传的文件都是由客户端控制的,在这种情况下,恶意的人就可以利用它们。一些危险的可执行脚本可能会被注入到服务器中。因此,胖哥总结出以下建议。文件类型过滤开发人员应该有一个过滤列表。允许上传的文件类型应限于业务功能需要的文件类型。没有允许列表过滤器,永远不要直接接受文件名及其扩展名,前端应该描述这个列表。这是必要的一步,大多数开发人员都做得很好。文件名处理不能使用原始文件名!这是一个容易被忽视的问题。很多开发者喜欢直接把上传的文件按照原文件名转储。//在Springboot开发中不建议使用这个作为转储名称。您应该生成一个新名称来映射此名称。StringoriginalFilename=MultipartFile.getOriginalFilename();这不安全。虽然大多数/\:<>?字符已被过滤掉,.*%$,这些脚本中的正则仍然可以包含在文件名中,所以不能使用原始文件名,你应该指定一种算法来命名,建议使用摘要算法来确定文件名。例如,文件名可以是文件名加上日期的MD5散列值。如果业务需要原文件名,存储新命名与原文件名的映射即可。摘要校验无论是上传、修改还是下载文件,服务器都需要进行摘要校验(MD5、SHA256),防止文件与预设文件不一致。还建议客户端在必要时执行摘要验证。如果使用Spring开发,限制大小已经被限制。如果限制不满足业务需求,可以修改,但不能取消限制,否则会导致拒绝服务攻击。访问限制如果业务不需要,只有经过身份验证和授权的用户才能使用文件上传功能。否则,您的系统将成为别人的免费画床。为了安全,我们只能被动防御行为审计。所以建议对文件上传操作有审计日志,审计日志不要受文件系统的影响,这样当发生安全事件时,可以快速定位问题。3.总结其实安全方面还有很多需要考虑的点,但是目前大部分都是使用第三方存储。如果使用自研系统,可能需要考虑更多。但是对于普通的开发来说,做到以上几点就足够了。本文转载自微信公众号“码农小胖哥”,可通过以下二维码关注。转载本文请联系码农小胖公众号。
