我有一个文件类型限制的文件上传器。上传者通过检查文件扩展名来检查文件类型(例如* .txt => allowed,* .exe =>不允许)。我现在被告知这是一个问题,你可以简单地编辑文件扩展名并上传它,即使它是一个不允许的文件。
所以我的问题是:是否有可能在不检查文件扩展名的情况下检测文件类型?以任何方式存在安全风险,例如:如果可以上传带编辑扩展名的二进制文件吗?
我使用Ajax / Javascript和MVC4(所以Windows Server)。但我认为这是一个普遍的问题。
很抱歉,如果这个问题可能不那么具有挑战性,但我不知道除了询问之外我怎么能找到它。 (所以没有downvotes please ^^)
答案 0 :(得分:0)
如果可以看到文件内容,可以在某些文件类型中查找各种“幻数”。 http://en.wikipedia.org/wiki/EXE提供了一些有关Windows可执行文件中可能用于通过查看文件内容来标识可执行文件的标记的信息。我确信,有关MSDN和其他地方可用文件格式的更详细的技术资源 至于它是否存在安全风险,一旦取回数据,这在很大程度上取决于您对数据的处理方式。即使不在EXE包中,如果处理不当,也可以执行一串字节,相反可以安全地处理EXE。
答案 1 :(得分:0)
要检测文件类型,您可以查看扩展名,也可以查看内容。
1)正如您已经注意到的那样,扩展名不可靠,因为它只是一种惯例。没有人能确保扩展是正确的。
2)另一种方法是查看文件并尝试猜测类型。为此,您必须编写已知标题列表或其他类型的签名来查找。根据文件的类型,这可能更可靠,但根据您期望的文件类型,可能会产生很大的开销。