我正在做一個文件上傳腳本,只允許jpgs。
我使用檢查腳本是文件上傳限制某些文件類型
$size = getimagesize($filename);
$size['mime'];
,在大多數情況下工作。但是,如果我有一個「gif」文件,並將擴展名重命名爲「jpg」,它會欺騙系統,因爲該文件的MIME類型顯示爲jpg。
我該如何預防?
所以,JPG和PNG允許 的Gif是不允許
我正在做一個文件上傳腳本,只允許jpgs。
我使用檢查腳本是文件上傳限制某些文件類型
$size = getimagesize($filename);
$size['mime'];
,在大多數情況下工作。但是,如果我有一個「gif」文件,並將擴展名重命名爲「jpg」,它會欺騙系統,因爲該文件的MIME類型顯示爲jpg。
我該如何預防?
所以,JPG和PNG允許 的Gif是不允許
但是,如果我有一個「GIF」文件,我改名爲延伸自MIME類型,爲「JPG」,其招數系統文件顯示爲jpg。
提取使用pathinfo()
基礎文件名(不含擴展名):
$file =
pathinfo("myFakeGifImage.jpg", PATHINFO_BASENAME); // returns myFakeGifImage
,並添加基於文件類型的擴展名getimagesize()
回報的,而不是用戶告訴你。
如果您只需要jpegs,請將其加載到imagecreatefromjpeg,它對僞造的jpegs錯誤返回FALSE。
而不是$size['mime']
(您已經認識到,它是MIME類型,因此不完全可靠),請使用$size[2]
。
The manual entry說,它包含
指示圖像的類型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
此信息,隨時爲您最可靠的機制。
+1 - 這裏列表http://www.php.net/manual/en/function.exif-imagetype.php – leonbloy 2011-05-23 16:41:39
@leonbloy:啊哈,它是!謝謝。 – 2011-05-23 17:00:27
PHP也能夠檢測文件的MIME類型,即通過使用mime_content_type
。這是一個安全的方法,因爲它實際上檢查文件的內容。
我不明白什麼刪除擴展將完成,除了使$ file變量無用於實際訪問文件。 – 2011-05-23 16:40:12