【问题标题】:Can I trust the file type from $_FILES?我可以信任来自 $_FILES 的文件类型吗?
【发布时间】:2011-11-10 15:28:15
【问题描述】:

上传图片时我可以信任来自$_FILES 的文件类型吗?还是我必须再次与exif_imagetype() 核对?

【问题讨论】:

    标签: php security upload


    【解决方案1】:

    我总是使用下一个函数来检查有效图像:

    function Check_Image($Filename) {
        if ($Check_Image = @getimagesize($Filename)) {
            return TRUE;
        }
        return FALSE;
    }
    

    【讨论】:

      【解决方案2】:

      永远不要相信来自外部的任何东西,尤其是文件上传!

      检查大小、位置、mime/类型、扩展名以及您可以检查的任何其他内容!

      【讨论】:

      • 但是类型是从外面来的吗?还是php添加的东西?
      • 浏览器提供,不要信任。
      • @Wesley van Opdorp 同意,如果可以的话,也检查一下内容
      【解决方案3】:

      来自documentation

      文件的 mime 类型(如果浏览器提供了此信息)。一个例子是“image/gif”。然而,这种 mime 类型在 PHP 端没有被检查,因此不要认为它的价值是理所当然的。

      【讨论】:

        【解决方案4】:

        不,你不能相信它,因为this information is provided by the client browser

        $_FILES['userfile']['type']文件的mime类型,如果是浏览器 提供了这些信息。一个例子是“image/gif”。这个哑剧 然而,类型并没有在 PHP 端检查,因此不采取 它的价值是理所当然的。

        【讨论】:

          【解决方案5】:

          不,您不能信任 $_FILES['userfile']['type'] 变量。此变量中存在的值可能是伪造的。您可以使用finfo_file 更可靠地检测文件类型:

          $finfo = finfo_open(FILEINFO_MIME_TYPE); // we need mime type
          echo finfo_file($finfo, "/path/to/uploaded/file"); // displays something like image/gif
          finfo_close($finfo);
          

          这些函数需要 PHP >= 5.3.0。

          【讨论】:

            猜你喜欢
            • 2016-09-07
            • 2022-07-22
            • 2018-05-05
            • 2017-06-12
            • 2010-09-18
            • 2014-01-29
            • 2012-07-20
            • 1970-01-01
            • 2018-08-08
            相关资源
            最近更新 更多