上传后检查文件类型
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,因为它包含相当多的文件及其签名。
当然,即使这也不是万无一失的,但它与您在不深入研究启发式方法的情况下所获得的一样接近。
【讨论】:
以上是关于上传后检查文件类型的主要内容,如果未能解决你的问题,请参考以下文章