1. 前言

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

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

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

文件类型过滤

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

文件名称处理

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

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

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

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

摘要校验

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

限制大小

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

访问限制

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

行为审计

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

3. 总结

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

推荐关注本文作者:码农小胖哥

分享高质量编程知识,探讨IT人生

技术干货,实战技巧,面试技巧,前沿资讯一个都不能少

往期推荐

IDEA不能一个窗口管理多个项目?那是你不会用!

Nacos 惊爆安全漏洞,可绕过身份验证(附修复建议)

百度申请“员工工作状态预测”专利,意欲何为?

手握2.2亿美元,但想不起密码,还有两次机会,一起支支招啊!

JAR冲突问题的解决以及运行状态下如何查看加载的类

历史上的 996

新同事上来就把项目性能优化了一遍,瑟瑟发抖。。。

开发文件上传功能稍不注意就会引发安全漏洞相关推荐

  1. SSM开发书评网29:后台二:wangEditor图片上传;(主要内容是【wangEditor图片上传的文档要求】,【Spring MVC整合FileUpload组件,以实现文件上传功能】)

    说明: (1)本篇博客内容说明:[在后台系统,我们点击新增按钮后,会弹出新增图书对话框]→[该对话框中,包含一个wangEditor富文本编辑器]→[wangEditor富文本编辑器中,可以包含图片] ...

  2. Spring MVC环境中的文件上传功能实现

    在实际开发过程中,尤其是web项目开发,文件上传和下载的需求的功能非常场景,比如说用户头像.商品图片.邮件附件等等.其实文件上传下载的本质都是通过流的形式进行读写操作,而在开发中不同的框架都会对文件上 ...

  3. php用ajaxs上传图片_php+ajax实现图片文件上传功能实例

    目前常用的异步文件上传功能有几种,比较多见的如使用iframe框架形式,ajax功能效果,以及flash+php功能,下面介绍ajax与iframe实现异步文件上传的功能的例子. 方法一,利用jque ...

  4. query AjaxUpload实现多文件上传功能代码实例教程

    在PHP网站开发中,文件上传功能时常用到,之前我已介绍过如何利用PHP实现文件上传功能.随着WEB技术的发展,用户体验成为衡量网站成功与否的关键,今天和大家分享如何在PHP中利用Jquery实现Aja ...

  5. springboot util 测试类怎么写_SpringBoot入门建站全系列(九)文件上传功能与下载方式...

    SpringBoot入门建站全系列(九)文件上传功能与下载方式 Spring对文件上传做了简单的封装,就是用MultipartFile这个对象去接收文件,当然有很多种写法,下面会一一介绍. 文件的下载 ...

  6. SpringBoot入门建站全系列(九)文件上传功能与下载方式

    SpringBoot入门建站全系列(九)文件上传功能与下载方式 Spring对文件上传做了简单的封装,就是用MultipartFile这个对象去接收文件,当然有很多种写法,下面会一一介绍. 文件的下载 ...

  7. 【ASP.NET教程-WP教程08】ASP.NET Web Pages - 文件-在ASP.NET Web Pages中处理文件和实现文件上传功能的介绍

    ASP.NET Web Pages - 文件处理与上传 在ASP.NET Web Pages开发中,文件处理和上传是常见的任务之一.文件处理涉及到多个方面,包括文件的读取.写入.复制.移动和删除等操作 ...

  8. 实现HTTP协议Get、Post和文件上传功能——使用libcurl接口实现

    之前我们已经详细介绍了WinHttp接口如何实现Http的相关功能.本文我将主要讲解如何使用libcurl库去实现相关功能.(转载请指明出于breaksoftware的csdn博客) libcurl在 ...

  9. 实现HTTP协议Get、Post和文件上传功能——使用WinHttp接口实现

    在<使用WinHttp接口实现HTTP协议Get.Post和文件上传功能>一文中,我已经比较详细地讲解了如何使用WinHttp接口实现各种协议.在最近的代码梳理中,我觉得Post和文件上传 ...

最新文章

  1. 系统怎么手动打补丁_韩国服务器不稳定怎么办?
  2. Leetcode 213.大家劫舍II
  3. 用Python分析深圳程序员工资有多高?
  4. 用Nginx+Lua(OpenResty)开发高性能Web应用
  5. C语言 | 链表概述
  6. cuda矩阵相乘_cuda初学(1):稀疏矩阵向量乘法(单精度)
  7. [转]“Ceph浅析”系列之(—)—Ceph概况
  8. Flutter视图基础简介--Widget、Element、RenderObject
  9. VS2015 包含目录、库目录、附加包含目录、附加库目录、附加依赖项之详解
  10. 封装Apache http client工具类
  11. 下了一个游戏说计算机丢失,冰封64位win10系统下启动游戏提示计算机丢失XINPUT1-3.dll怎么办...
  12. 压缩照片大小——PPT实现
  13. 3dMAX+Vary 调节焦散效果爬坑
  14. netty学习01--nio与oio的比较
  15. 职工信息管理系统(链表版)
  16. 支持向量机(SVM)MATLAB 实例讲解,及选择训练方式使误差率尽可能减为0
  17. 科学计算库学习笔记(持续更新)
  18. python安装cfgrib读取grib数据
  19. 常见的纸张及相片尺寸
  20. Linux可加载内核模块(LKM)(转载)

热门文章

  1. ASP.NET 中的表单身份验证(Forms Authentication)
  2. php linux fork进程 多个进程/线程共享一个 socket连接 出现多个进程响应串联
  3. docker 构建错误 E: List directory /var/lib/apt/lists/partial is missing.-Acquire (13: Permission denied)
  4. 数据包头分析---网络字节序与主机字节序
  5. linux删除文件夹命令6,linux 结合find命令进行文件的删除
  6. 扇出性 java_索引与算法
  7. python数组操作加法_Numpy数组索引和/或加法似乎是
  8. C 不重复地输出升序数组中的元素
  9. 怎么覆盖默认样式_PPT办公技巧:3种办法快速统一幻灯片中不同形状的显示样式...
  10. c语言多组输入字符,关于c语言中 scanf 对多行字符的输入问题