【问题标题】:Get real file extension -Java code获取真实的文件扩展名-Java代码
【发布时间】:2010-01-19 04:13:15
【问题描述】:

出于安全原因,我想确定真正的文件扩展名。

我该怎么做?

【问题讨论】:

  • “真实”是什么意思?您在寻找文件的真实内容类型吗?
  • 如果您的意思是基于文件内容的“真实扩展名”,那么幻数是一个不错的起点。
  • 我认为他在谈论真正的文件类型。这意味着如果您将 EXE 重命名为 jpg,他需要将其检测为 exe。是的。幻数是可能的方法之一。
  • 对于文件扩展名,就像文件名末尾的位一样,您需要非常小心地信任来自不受信任来源(谁会猜到)的输入。特别是诸如插入 NUL 字符之类的技巧可能会绕过您的检查。

标签: java


【解决方案1】:

假设您真的想要获取文件的真实内容类型(即 MIME 类型),您应该参考这个excellent answer

您可以使用以下代码在 Java 中获取文件的真实内容类型:

File file = new File("filename.asgdsag");
InputStream is = new BufferedInputStream(new FileInputStream(file));
String mimeType = URLConnection.guessContentTypeFromStream(is);

【讨论】:

  • 还重定向了与该答案有类似问题的 SO 用户 :) URLConnection.guessContentTypeFromStream 方法并不为人所知,这很奇怪 - 很多资源建议使用第三方库,当答案就在JDK
【解决方案2】:

a number of ways 可以做到这一点,有些比其他的更复杂(也更可靠)。我链接到的页面讨论了很多这样的方法。

【讨论】:

    【解决方案3】:

    不确定你的意思,但无论你怎么做,它只适用于你知道的特定文件格式集

    您可以排除可执行文件(您在这里说的是 windows 吗?) - 这里有一些文件头信息http://support.microsoft.com/kb/65122 - 您可以扫描和阻止看起来像有 exe 头的文件 - 这是否接近您的意思你说'真正的文件扩展名'?

    【讨论】:

      猜你喜欢
      • 2016-01-17
      • 2012-03-11
      • 1970-01-01
      • 1970-01-01
      • 2011-04-04
      • 2018-11-08
      • 2012-09-12
      • 1970-01-01
      • 2012-06-07
      相关资源
      最近更新 更多