我正在做一个只允许jpgs的文件上传脚本 我用来检查的脚本是
$size = getimagesize($filename);
$size['mime'];
在大多数情况下都适用。但是,如果我有一个“gif”文件并且我将扩展名重命名为“jpg”,则会欺骗系统,因为该文件的mime类型显示为jpg。
我该如何防止这种情况?
所以允许jpg和png 不允许使用Gif
答案 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
。这是一种安全的方法,因为它实际上检查了文件的内容。