SpringBoot中如何验证用户上传的图片资源
发表于:2025-11-16 作者:千家信息网编辑
千家信息网最后更新 2025年11月16日,小编给大家分享一下SpringBoot中如何验证用户上传的图片资源,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!允许用户上
千家信息网最后更新 2025年11月16日SpringBoot中如何验证用户上传的图片资源
小编给大家分享一下SpringBoot中如何验证用户上传的图片资源,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
允许用户上传图片资源(头像,发帖)是APP常见的需求,特别需要把用户的资源IO到磁盘情况下,需要防止坏人提交一些非法的文件,例如木马,webshell,可执行程序等等。这类非法文件不仅会导致客户端图片资源显示失败,而且还会给服务器带来安全问题。
通过文件后缀判断文件的合法性
这种方式比较常见,也很简单,是目前大多数APP选择的做法。
public Object upload (@RequestParam("file") MultipartFile multipartFile) throws IllegalStateException, IOException { // 原始文件名称 String fileName = multipartFile.getOriginalFilename(); // 解析到文件后缀,判断是否合法 int index = fileName.lastIndexOf("."); String suffix = null; if (index == -1 || (suffix = fileName.substring(index + 1)).isEmpty()) { return "文件后缀不能为空"; } // 允许上传的文件后缀列表 Set allowSuffix = new HashSet<>(Arrays.asList("jpg", "jpeg", "png", "gif")); if (!allowSuffix.contains(suffix.toLowerCase())) { return "非法的文件,不允许的文件类型:" + suffix; } // 序列化到磁盘中的文件上传目录, /upload // FileCopyUtils.copy 方法会自动关闭流资源 FileCopyUtils.copy(multipartFile.getInputStream(), Files.newOutputStream(Paths.get("D://upload", fileName), StandardOpenOption.CREATE_NEW)); // 返回相对访问路径,文件名极有可能带中文或者空格等字符,进行uri编码 return "/" + UriUtils.encode(fileName, StandardCharsets.UTF_8);} 使用 ImageIO 判断是否是图片
这个方法就比较严格了,在判断后缀的基础上,使用Java的ImageIO类去加载图片,尝试读取其宽高信息,如果不是合法的图片资源。则无法读取到这两个数据。就算是把非法文件修改了后缀,也可以检测出来。
public Object upload (@RequestParam("file") MultipartFile multipartFile) throws IllegalStateException, IOException { // 原始文件名称 String fileName = multipartFile.getOriginalFilename(); // 解析到文件后缀 int index = fileName.lastIndexOf("."); String suffix = null; if (index == -1 || (suffix = fileName.substring(index + 1)).isEmpty()) { return "文件后缀不能为空"; } // 允许上传的文件后缀列表 Set allowSuffix = new HashSet<>(Arrays.asList("jpg", "jpeg", "png", "gif")); if (!allowSuffix.contains(suffix.toLowerCase())) { return "非法的文件,不允许的文件类型:" + suffix; } // 临时文件 File tempFile = new File(System.getProperty("java.io.tmpdir"), fileName); try { // 先把文件序列化到临时目录 multipartFile.transferTo(tempFile); try { // 尝试IO文件,判断文件的合法性 BufferedImage bufferedImage = ImageIO.read(tempFile); bufferedImage.getWidth(); bufferedImage.getHeight(); } catch (Exception e) { // IO异常,不是合法的图片文件,返回异常信息 return "文件不是图片文件"; } // 复制到到上传目录 FileCopyUtils.copy(new FileInputStream(tempFile), Files.newOutputStream(Paths.get("D://upload", fileName), StandardOpenOption.CREATE_NEW)); // 返回相对访问路径 return "/" + UriUtils.encode(fileName, StandardCharsets.UTF_8); } finally { // 响应客户端后,始终删除临时文件 tempFile.delete(); }} 以上是"SpringBoot中如何验证用户上传的图片资源"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
文件
图片
后缀
资源
图片资源
合法
用户
目录
篇文章
验证
原始
信息
内容
合法性
名称
客户
客户端
常见
序列
方法
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
三星服务器内存真假
无线网络技术与应用pdf
中班有关网络安全教案
网络安全内部威胁主要手段包括
全球汽车行业数据库
mssql获取数据库结构
网络安全法的七个方面
有做服务器吗
软件开发智慧城市蓝图
软件开发工具自考2019
我的世界理想乡服务器教程
数据库常用的保护方法
网络安全工作组
网络安全责任人标签
广陵租房软件开发
软件网站服务器
如何建设一流数据库
支付宝商户与服务器
北京oa软件开发诚信企业
淘宝客挂机服务器
做三维设计用服务器可以吗
郑州程序软件开发收费报价表
中兴支点服务器操作系统
网络安全保护国家
网络安全手抄报简单穿搭
数据库新增字段测试用例
全球网络安全总监是什么职业
谨防网络安全主题班会
打开网络安全手抄报还不用
数据库字段去除重复