后缀判断的隐患:

对于判断前端(或网络)发送过来文件的类型,有些同学第一个想到的可能就是:根据其后缀名进行格式的判断。。。
正常情况下,是可以这样做。但实际上,任何文件的后缀都可以随意命名,因此仅通过后缀名判断其文件格式是不安全的。
如果有人将奇奇怪怪的文件后缀名改成你认为合法的后缀调用你的接口,那么你的服务器就变成了别人的网盘。

Solution:

  • 我们可以根据文件头判断文件的格式。
  • 什么是文件头(百度百科)

常见的图片的文件头(包括但不限于):

文件类型 文件头(这里是16进制)
png 89504E47
jpg FFD8FFE0 / FFD8FFE1 / FFD8FFE8
tif 49492A00
  • 其他文件类型文件头链接分享:

    • 链接1
    • 链接2

java获取文件头方法:

/*** 获取文件头* @param file 文件* @return value of fileHeader(Hex)*/public String getFileHeader( MultipartFile file) {InputStream is = null;String value = null;try {is = file.getInputStream();byte[] b = new byte[4];is.read(b, 0, b.length);value = bytesToHexString(b);} catch (Exception e) {e.printStackTrace();} finally {if (null != is) {try {is.close();} catch (IOException e) {e.printStackTrace();}}}return value;}private String bytesToHexString(byte[] src) {StringBuilder builder = new StringBuilder();if (src == null || src.length <= 0) {return null;}String hv;for (byte b : src) {hv = Integer.toHexString(b & 0xFF).toUpperCase();if (hv.length() < 2) {builder.append(0);}builder.append(hv);}return builder.toString();}

java 判断文件类型(根据文件头)相关推荐

  1. java 判断文件类型是否是音频_用java流方式判断文件类型

    这个方法只能在有限的范围内有效.并不是万金油 比如 图片类型判断,音频文件格式判断,视频文件格式判断等这种肯定是2进制且专业性很强的文件类型判断. 下面给出完整版代码 首先是文件类型枚取 packag ...

  2. java 判断文件类型是否是音频_Android判断文件类型(视频、音频、图片等) | 学步园...

    MediaFile.java package com.jaycee.vplayer.util; import java.util.HashMap; import java.util.Iterator; ...

  3. Java判断文件类型

    通常,在WEB系统中,上传文件时都需要做文件的类型校验,大致有如下几种方法: 1. 通过后缀名,如exe,jpg,bmp,rar,zip等等. 2. 通过读取文件,获取文件的Content-type来 ...

  4. java读取文件内容,文件头有\ufeff

    "\ufeff"是UTF-8 BOM编码的文件头,代表该文件按照什么字节顺序排序 调用java的工具类[ UnicodeInputStream ]即可解决这个问题 //第二个参数t ...

  5. java 文件头 文件类型 files_根据文件头数据判断文件类型

    现有一文件,其扩展名未知或标记错误.假设它是一个正常的.非空的文件,且将扩展名更正后可以正常使用,那么,如何判断它是哪种类型的文件? 在后缀未知,或者后缀被修改的文件,依然通过文件头来判断该文件究竟是 ...

  6. java 判断文件的类型,用java流方式判断文件类型

    这个方法只能在有限的范围内有效.并不是万金油 比如 图片类型判断,音频文件格式判断,视频文件格式判断等这种肯定是2进制且专业性很强的文件类型判断. 下面给出完整版代码 首先是文件类型枚取 packag ...

  7. java 文件类型判断_Java:判断文件类型(支持网络文件)

    根据文件后缀来判断文件类型,往往是不靠谱的,因为要考虑到,可能人为的更改文件后缀,导致一些问题. 因此,下面是详细的根据文件头信息来判断文件类型. 文件头的十六进制以后继续补充. package co ...

  8. 根据文件头数据判断文件类型

    现有一文件,其扩展名未知或标记错误.假设它是一个正常的.非空的文件,且将扩展名更正后可以正常使用,那么,如何判断它是哪种类型的文件? 在后缀未知,或者后缀被修改的文件,依然通过文件头来判断该文件究竟是 ...

  9. java 判断网络类型_javaexcel判断类型

    1. java如何判断数据类型 给你一个封装好的方法,只要把excel中的cell放入就会返回对应的值,里面有类型检测 public static String getExcelCellValue(H ...

最新文章

  1. 如何用CSS快速布局(一)—— 布局元素详细
  2. 一直学不明白的「递归」与「动态规划」原来这么简单
  3. SAP MM 工序委外流程初探
  4. python pptx 从中间加几页_python-pptx---插入表格
  5. JVM判断对象是否已死?
  6. PC机I/O端口分配列表
  7. 一条SQL语句查询当前数据库下有多少张表
  8. 【干货】卷积神经网络Alex-Net、VGG-Nets、Network-In-Network案例分析
  9. Python采集3000条北京二手房数据,看我都分析出了啥?
  10. JSK-61 二进制加法【大数】(废除!!!)
  11. php 占位符替换_AJAX ASP / PHP实例
  12. 3.第一本 docker 书 --- docker 网络
  13. 无线电监测软件java_大牛干货:软件无线电的设计和测试
  14. 如何查看自己的外网 IP 地址
  15. zblock 结构_结构方块 - Minecraft Wiki,最详细的官方我的世界百科
  16. curl encode
  17. Mac ERROR launching JD-GUI
  18. 存地失人,人地皆失;存人失地,人地皆存。
  19. 格式化D盘显示有一个应用程序正在运行,无法格式化
  20. VS+Qt+C++银行排队叫号系统

热门文章

  1. AUTOSAR基础篇之OS(上)
  2. 【Android】Android.bp 实例之源码编译动态库
  3. angular4 php,Angular4中router使用技巧
  4. 计算机的地址栏清理,清理win7资源管理器地址栏中的历史记录
  5. python调用stitcher类进行图像拼接融合
  6. 2021年三季度中国物流行业A股上市企业营收排行榜:*ST飞马于12月初成功摘星脱帽(附热榜TOP46详单)
  7. 百度大脑 EdgeBoard FZ3 配置迈德威视(mindvision)环境
  8. DaVinci Resolve Studio v18.0.0.10 达芬奇调色软件安装说明
  9. 乐视在美国为新项目众筹,成功后将生产混合动力滑板车
  10. 2016数学建模国赛A题程序(原创)作者cclplus