文件
1.1、文件的概念

文件是操作系统中的概念。每个操作系统通常都会有文件系统。而文件系统就是用来管理文件的。

1.2、如何确定文件的类型?

不能简单的通过后缀名来判断文件的类型,因为恶意攻击可以将可执行文件的后缀名称改为图片或者其他格式, 诱导用户执行,因此,判断上传文件的类型需要更安全的方式。

文件上传功能是很多网站都必须的功能,而判断文件类型不仅可以过滤文件的上传,同时也能防范用户上传恶意的可执行文件和脚本, 以及将文件上传服务器当作免费的文件存储服务器使用。

我们都知道,从大的范围讲,数据分为文本、图像、音频、视频四大类。但是每个分类下都会有很多的细类。 比如文本文件又有很多种类型:text、html、xml等,音频也有很多种类类型:wav、mp3等。

我们如何确定某个文件到底是哪种具体类型呢?实际上,很多类型的文件,起始的几个字节内容都是固定的,跟据这几个字节的内容, 就可以判断文件的类型,这几个字节也被称为"魔数"。

"魔数"是一个数字,通常使用十六进制表示。

你可以通过hexdump -C 文件路径 | less命令查看指定文件的"魔数"。

常见文件类型的"魔数":

文件格式后缀名魔数MIME说明
texttxt0x
Rich Text Formatrtf0x7B5C727466
XMLxml0x3C3F786D6C
HTMLhtml0x68746D6C3E
JPEGjpg
jpeg
0xFFD8FF
PNGpng0x89504E470D0A1A0A
GIFgif0x47494638
TIFFtif
tiff
0x49492A00
BMPbmp0x424D
PSDpsd0x38425053
CADdwg0x41433130
Wavewav0x57415645
MIDImid0x4D546864
AVIavi0x41564920
Real Mediarm0x2E524D46
QuickTimemov0x6D6F6F76
Windows Mediaasf0x3026B2758E66CF11
ZIP Archivezip0x504B0304jar、war、aar、apk等文件都是基于zip格式进行扩展的
RAR Archiverar0x52617221
GZ Archivegz
tgz
0x1F8B08
BZIP Archivebz2
7-ZIP Archive7z
MS Excelxls0xD0CF11E0
MS Worddoc0xD0CF11E0
MS Accessmdb0x5374616E64617264204A
PDFpdf0x255044462D312E
Java Byte Codeclass0xCAFEBABE
Dalvik Executabledex0xCAFEBABE
1.3、如何确定文件的完整性?