检测用户是不是更改了要上传的文件扩展名?

Posted

技术标签:

【中文标题】检测用户是不是更改了要上传的文件扩展名?【英文标题】:Detect if user changed file extension to upload?检测用户是否更改了要上传的文件扩展名? 【发布时间】:2011-04-04 23:40:44 【问题描述】:

使用 Java servlet,是否可以检测文件的真实文件类型,而不管其扩展名如何?

场景:您只允许上传纯文本文件(.txt 和 .csv) 用户获取文件 mypicture.jpg,将其重命名为 mypicture.txt,然后继续上传文件。您的 servlet 只需要文本文件,并在尝试读取 jpg 时崩溃。

显然这是用户错误,但有没有办法检测到它不是纯文本而不继续?

【问题讨论】:

【参考方案1】:

您可以使用内置的URLConnection#guessContentTypeFromStream() API 执行此操作。然而,它可以检测到的内容类型非常有限,您可以更好地使用像 jMimeMagic 这样的第三方库。

另见:

Best way to determine file type in Java When do browsers send application/octet-stream as Content-Type?

【讨论】:

【参考方案2】:

没有。无法知道您上传的是什么类型的文件。在对文件执行任何操作之前,您必须在服务器上进行所有验证。

【讨论】:

【参考方案3】:

我认为您应该考虑为什么您的程序在提供 JPEG(比如说)时可能会崩溃,并使其防御这种情况。例如,JPEG 文件可能有明显很长的行(CR LF 的任何 LF 都会随机分布)。但是一个所谓的文本文件也可能有很长的行,可能会杀死你的程序,

【讨论】:

【参考方案4】:

“纯文本文件”到底是什么意思?由中文文本组成的文件会是纯文本文件吗?如果您假设英文文本采用 ASCII 或 ANSI 编码,则必须将完整文件作为二进制文件读取,并检查 e. G。所有字节值都在 32 到 127 加上 13、10、9 之间。

【讨论】:

以上是关于检测用户是不是更改了要上传的文件扩展名?的主要内容,如果未能解决你的问题,请参考以下文章

如何测试用户是不是选择了要上传的文件?

文件上传漏洞

文件上传漏洞

上传漏洞

文件上传漏洞部分知识点

upload上传通关游戏