Php 文件上载限制某些文件类型

Php 文件上载限制某些文件类型,php,Php,我正在做一个只允许jpgs的文件上传脚本。 我用来检查的脚本是 $size = getimagesize($filename); $size['mime']; 这在大多数情况下都有效。但是,如果我有一个“gif”文件,并且我将扩展名重命名为“jpg”,则会欺骗系统,因为该文件的mime类型显示为jpg 我怎样才能防止呢 所以jpg和png是允许的 Gif是不允许的 但是,如果我有一个“gif”文件,并且我将扩展名重命名为“jpg”,则会欺骗系统,因为该文件的mime类型显示为jpg 使用以下命

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

$size = getimagesize($filename);
$size['mime'];
这在大多数情况下都有效。但是,如果我有一个“gif”文件,并且我将扩展名重命名为“jpg”,则会欺骗系统,因为该文件的mime类型显示为jpg

我怎样才能防止呢

所以jpg和png是允许的 Gif是不允许的

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

使用以下命令提取文件基名称(不带扩展名):


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

如果您只需要JPEG,则加载该扩展名,对于伪JPEG,错误时返回FALSE。

而不是
$size['mime']
(您已经意识到,这是mime类型,因此并不完全可靠),使用
$size[2]

说它包含

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

页面下方的注释方便地列出了这些常量:

 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

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

PHP还能够检测文件的MIME类型,即通过使用
MIME\u content\u Type
。这是一种安全的方法,因为它实际上会检查文件的内容。

我不知道删除扩展名会起到什么作用,除了使
$file
变量对实际访问文件无效。@leonbloy:Aha,就是这样!谢谢
 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