【问题标题】:Is it safe to upload files after validating by mime_content_type() and imagecreatefromjpg()?通过 mime_content_type() 和 imagecreatefromjpg() 验证后上传文件是否安全?
【发布时间】:2017-02-16 21:46:47
【问题描述】:

我阅读了很多关于在 PHP 中安全上传文件的文章(包括 this),我认为这是确保上传文件安全的最佳方式。

首先,我使用 mime_content_type() 检查其文件的类型。 如果是 JPG、JPEG 或 PNG,我会用 imagecreatefromjpg() 克隆它,如果成功,保存新文件并销毁原始文件。

我不确定这是否足够安全,或者我需要做其他事情。 感谢您的帮助。

【问题讨论】:

  • @mistermartin 我已经读过了。它没有提到我在这里问什么。他们没有说任何关于 imagecreatefromjpg()

标签: php security image-processing file-upload file-type


【解决方案1】:

TL;DR: mime_content_type 检查真实文件内容以检测类型

我为mime_content_type做了一些测试

  1. 当我创建文本文件并将其命名为“欺骗性”spoof.jpg...
    检测到的 mime 类型仍然是 text/plain

  2. 当我在不存在的文件上运行它时,它会抛出

    PHP Warning: mime_content_type(not.exist):
    failed to open stream: No such file or directory

这意味着 mime_content_type 检查 文件内容 的 mime 类型

它完全安全吗? 检测 true mime 类型是安全的,这是肯定的;) 但是,您还应该检查大小或清理文件名(重用时)等内容,有关更多安全细节,安全堆栈上有一个很好的答案:Risks of a PHP image upload form

请注意,在 PHP 手册中,这是在“Fileinfo Functions”菜单下 => 这有点暗示它使用文件读取机制,尽管确实手动输入并没有明确说明...

【讨论】:

    【解决方案2】:

    “mime_content_type”和“exif_imagetype”不应​​用于安全目的,因为它们都允许欺骗文件!

    更多详情来自以下链接: https://straighttips.blogspot.com/2021/01/php-upload-spoofed-files.html

    【讨论】:

      猜你喜欢
      • 2011-10-02
      • 2019-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-17
      • 2017-05-18
      • 2010-10-21
      相关资源
      最近更新 更多