检测不带结尾的文件类型

本文关键字:文件 类型 结尾 检测 | 更新日期: 2023-09-27 18:20:56

我有一个带有文件类型限制的文件上传器。上传程序通过检查文件扩展名来检查文件类型(如*.txt=>允许,*.exe=>不允许)。我现在被告知,这是一个问题,你可以简单地编辑文件扩展名并上传它,即使它是一个不允许的文件。

所以我的问题是:是否可以在不检查文件扩展名的情况下检测文件类型?这会以任何方式带来安全风险吗?例如,如果可以上传经过编辑扩展的二进制文件?

我将Ajax/Javascript与MVC4一起使用(因此Windows Server)。但我认为这是一个普遍的问题。

如果这个问题没有那么具有挑战性,我很抱歉,但除了问,我不知道如何才能找到答案。(所以请不要投反对票^^)

检测不带结尾的文件类型

如果可以查看文件内容,则可以在某些文件类型中查找各种"幻数"。http://en.wikipedia.org/wiki/EXE提供了有关Windows可执行文件中某些标记的一些信息,这些标记可用于通过查看文件内容来识别可执行文件。我确信,MSDN和其他地方提供了关于文件格式的更详细的技术资源
至于它是否存在安全风险,这在很大程度上取决于你检索数据后对数据的处理。如果处理不当,即使不在EXE包中,也可以执行一个字节串,相反,EXE可以安全处理。

要检测文件类型,可以查看扩展名,也可以查看内容。

1) 正如您已经注意到的,扩展并不可靠,因为它只是一种约定。没有人能确保延期是正确的。

2) 另一种方法是查看文件并尝试猜测类型。为此,您必须编写一个已知标头或其他类型签名的列表来查找。根据文件类型的不同,这可能更可靠,但根据您期望的文件类型,这可能会导致很大的开销。