通过幻数确定文件类型

Determine filetype by magic number

我必须检查文件上传器中的文件类型以确定文件是否为图像(jpg、png),我决定通过使用 FileReader 读取文件的幻数(第 4 个字节)来完成此操作,但我对这种方法有一些疑问:

  1. 这种方法安全吗?有没有办法用这种方法将非 jpg 文件上传为 jpg?

  2. 我见过具有不同幻数大小的文件类型,例如 2、4、6 字节...所以如果我必须制定一个通用方法来确定图像文件类型和其他文件类型,我必须从文件中读取最大字节数(以确定最大幻数),对吗?

  1. 不安全。问题不仅在于幻数,而且已经在于您尝试在客户端验证它。 可以绕过客户端验证直接从脚本上传表单。 正确的做法是使用经过验证的技术在服务器端验证所有内容。

  2. 没错。不同的文件格式在不同的偏移量上有不同的幻数。但如果你关心安全 - 不要相信任何东西。