上传后检查文件类型

Posted

技术标签:

【中文标题】上传后检查文件类型【英文标题】:Check file type after upload 【发布时间】:2012-01-29 18:54:37 【问题描述】:

我正在使用可用的普通上传 API 将文件上传到服务器。现在我想检查上传的文件是否是有效文件。

我可以在页面上有多个文件上传框。有不同的要求,应该接受不同类型的文件。

说:

Input file 1 should take just exe
Input file 2 should take just html
Input file 3 should take just pptx

我可以检查扩展名并检查是一种解决方案,但可能会发生一些人可能会伪造扩展名并上传 txt 文件而不是 exe 等等

那么我如何检查是否使用 Java 上传了正确类型的文件

有一些 solution 用于相同的东西,但我不确定如何去做。

【问题讨论】:

您使用的是哪个 API? 我正在使用 commons-fileupload 我将尝试关闭这个问题,因为需要详细信息 - 目前太模糊无法回答。 【参考方案1】:

尝试使用适当的方法加载每个文件。比如尝试解析html文件,尝试加载带有POI的pptx文件。但它不适用于 exe。

【讨论】:

【参考方案2】:

对于commons-fileupload API,可以获取如下内容类型:

FileItem file; 
String contentType = file.getContentType();

基于此,您可以提供一些if-else 来实现您的逻辑。 FileItem 可能是DefaultFileItem。

【讨论】:

这对伪造文件没有帮助我可以将exe文件的扩展名更改为jpg并上传,它会给出文件类型为image【参考方案3】:

检查扩展名后,还需要检查文件的签名。这通常位于文件的前几个字节中。要获得一个好的列表,请参考http://www.garykessler.net/library/file_sigs.html,因为它包含相当多的文件及其签名。

当然,即使这也不是万无一失的,但它与您在不深入研究启发式方法的情况下所获得的一样接近。

【讨论】:

以上是关于上传后检查文件类型的主要内容,如果未能解决你的问题,请参考以下文章

检查 codeigniter 文件上传中允许的类型

input file 上传文件类型大小检查

PHP 文件上传文件类型和文件大小检查

检查上传的文件是不是在 php 中属于不安全的文件类型

如何使用 Laravel + React 检查上传文件的类型?

csharp 上传文件和检查大小和类型