检测用户是不是更改了要上传的文件扩展名?
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 之间。
【讨论】:
以上是关于检测用户是不是更改了要上传的文件扩展名?的主要内容,如果未能解决你的问题,请参考以下文章