我可以信任$ _FILES的文件类型吗?

时间:2011-09-05 13:22:24

标签: php security upload

上传图片时,我可以信任$_FILES的文件类型吗?或者我必须再次使用exif_imagetype()检查?

5 个答案:

答案 0 :(得分:7)

来自documentation

  

文件的mime类型,如果浏览器提供此信息。一个例子是“image / gif”。但是,在PHP方面没有检查这个mime类型,因此不会将其值视为理所当然。

答案 1 :(得分: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。

答案 2 :(得分:4)

永远不要相信来自外部的任何内容,特别是文件上传!

检查尺寸,位置,哑剧/类型,扩展以及您可以检查的任何其他内容!

答案 3 :(得分:3)

我总是使用下一个功能检查有效图像:

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

答案 4 :(得分:2)

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

  

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