文件上传限制某些文件类型

时间:2011-05-23 16:15:51

标签: php

我正在做一个只允许jpgs的文件上传脚本 我用来检查的脚本是

$size = getimagesize($filename);
$size['mime'];

在大多数情况下都适用。但是,如果我有一个“gif”文件并且我将扩展名重命名为“jpg”,则会欺骗系统,因为该文件的mime类型显示为jpg。

我该如何防止这种情况?

所以允许jpg和png 不允许使用Gif

4 个答案:

答案 0 :(得分:3)

使用$size['mime']而不是$size[2](正如您已经意识到的那样,是MIME类型,因此并非完全可靠),而是使用 1 = GIF 2 = JPG 3 = PNG 4 = SWF 5 = PSD 6 = BMP 7 = TIFF (Intel byte order) 8 = TIFF (Motorola byte order) 9 = JPC 10 = JP2 11 = JPX 12 = JB2 13 = SWC 14 = IFF 15 = WBMP 16 = XBM

The manual entry表示它包含

  

指示图像类型的IMAGETYPE_XXX常量之一。

页面下方的评论可以方便地列出这些常量:

{{1}}

此信息是通过检查文件本身生成的,因此是您可以使用的最可靠的机制。

答案 1 :(得分:1)

  

但是,如果我有一个“gif”文件并且我将扩展名重命名为“jpg”,那么它会欺骗系统,因为该文件的mime类型显示为jpg。

使用pathinfo()提取文件基本名称(不带扩展名):

$file =
 pathinfo("myFakeGifImage.jpg", PATHINFO_BASENAME); // returns myFakeGifImage

并根据getimagesize()返回的文件类型添加扩展名,而不是用户告诉您的内容。

答案 2 :(得分:0)

如果你只想要jpegs,那么用imagecreatefromjpeg加载它,对于伪造的jpegs错误返回FALSE。

答案 3 :(得分:0)

PHP还能够检测文件的MIME类型,即使用mime_content_type。这是一种安全的方法,因为它实际上检查了文件的内容。