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

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

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

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

【问题讨论】:

    标签: java servlets file-upload mime-types


    【解决方案1】:

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

    另见:

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2017-03-09
            • 2015-04-21
            • 2016-02-15
            • 1970-01-01
            • 1970-01-01
            • 2021-05-14
            • 2017-03-12
            • 2016-06-28
            • 1970-01-01
            相关资源
            最近更新 更多