1

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

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

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

对不起,如果这个问题可能没有那么具有挑战性,但我不知道除了问我怎么能找到它。(所以请不要反对^^)

4

2 回答 2

0

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

1)正如您已经注意到的那样,扩展并不可靠,因为它只是一个约定。没有人可以确保扩展名是正确的。

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

于 2013-07-04T13:14:28.003 回答
0

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

于 2013-07-04T13:13:43.403 回答