文件是操作系统中的概念。每个操作系统通常都会有文件系统。而文件系统就是用来管理文件的。
不能简单的通过后缀名来判断文件的类型,因为恶意攻击可以将可执行文件的后缀名称改为图片或者其他格式, 诱导用户执行,因此,判断上传文件的类型需要更安全的方式。
文件上传功能是很多网站都必须的功能,而判断文件类型不仅可以过滤文件的上传,同时也能防范用户上传恶意的可执行文件和脚本, 以及将文件上传服务器当作免费的文件存储服务器使用。
我们都知道,从大的范围讲,数据分为文本、图像、音频、视频四大类。但是每个分类下都会有很多的细类。 比如文本文件又有很多种类型:text、html、xml等,音频也有很多种类类型:wav、mp3等。
我们如何确定某个文件到底是哪种具体类型呢?实际上,很多类型的文件,起始的几个字节内容都是固定的,跟据这几个字节的内容, 就可以判断文件的类型,这几个字节也被称为"魔数"。
"魔数"是一个数字,通常使用十六进制
表示。
你可以通过hexdump -C 文件路径 | less
命令查看指定文件的"魔数"。
常见文件类型的"魔数":
文件格式 | 后缀名 | 魔数 | MIME | 说明 |
---|---|---|---|---|
text | txt | 0x | ||
Rich Text Format | rtf | 0x7B5C727466 | ||
XML | xml | 0x3C3F786D6C | ||
HTML | html | 0x68746D6C3E | ||
JPEG | jpg jpeg | 0xFFD8FF | ||
PNG | png | 0x89504E470D0A1A0A | ||
GIF | gif | 0x47494638 | ||
TIFF | tif tiff | 0x49492A00 | ||
BMP | bmp | 0x424D | ||
PSD | psd | 0x38425053 | ||
CAD | dwg | 0x41433130 | ||
Wave | wav | 0x57415645 | ||
MIDI | mid | 0x4D546864 | ||
AVI | avi | 0x41564920 | ||
Real Media | rm | 0x2E524D46 | ||
QuickTime | mov | 0x6D6F6F76 | ||
Windows Media | asf | 0x3026B2758E66CF11 | ||
ZIP Archive | zip | 0x504B0304 | jar、war、aar、apk等文件都是基于zip格式进行扩展的 | |
RAR Archive | rar | 0x52617221 | ||
GZ Archive | gz tgz | 0x1F8B08 | ||
BZIP Archive | bz2 | |||
7-ZIP Archive | 7z | |||
MS Excel | xls | 0xD0CF11E0 | ||
MS Word | doc | 0xD0CF11E0 | ||
MS Access | mdb | 0x5374616E64617264204A | ||
0x255044462D312E | ||||
Java Byte Code | class | 0xCAFEBABE | ||
Dalvik Executable | dex | 0xCAFEBABE |