2011-09-05 20 views
7

Görüntü yüklerken dosya türüne $_FILES dan güvenebilir miyim? Yoksa exif_imagetype() ile tekrar kontrol etmem gerekiyor mu?

cevap

6

: Tarayıcının bu bilgiyi sağlaması durumunda

dosyanın MIME türüdür. Bir örnek "image/gif" olacaktır. Ancak bu mime türü PHP tarafında kontrol edilmemekte ve bu nedenle verilen değeri almamaktadır.

+0

Mükemmel, teşekkürler – HappyDeveloper

3

Ben her zaman geçerli görüntülerde kontrol yanındaki işlevini kullanın:

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

dışarıdan gelen bir şey, özellikle dosya yüklemeyi asla güvenme!

Boyut, konum, mime/type, extenstion ve kontrol edebileceğiniz başka bir şey olup olmadığını kontrol edin! documentation itibaren

+0

Ancak bu tür dışarıdan geliyor mu? Yoksa php tarafından eklenmiş bir şey mi? – HappyDeveloper

+2

Tarayıcı bunu sağlar, ona güvenmeyin. –

+0

@Wesley van Opdorp da kararlaştırdı, eğer varsa * içeriğini * kontrol edin. – Cheekysoft

2

Hayır, güvenemiyorsunuz çünkü this information is provided by the client browser.

$_FILES['userfile']['type'] tarayıcı bu bilgiyi sağlaması durumunda dosyanın MIME türüdür. Bir örnek "image/gif" olacaktır. Ancak, bu kenar türünün PHP tarafında kontrol edilmez ve bu nedenle değerini verilen değerde almaz.

4

Hayır, $_FILES['userfile']['type'] değişkenine güvenemezsiniz. Bu değişkende mevcut olan değer dövülebilir. Sen daha güvenilir dosya türünü tespit etmek için finfo_file kullanabilirsiniz:

$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); 

Bu işlevler PHP> = 5.3.0 gerektirir.

İlgili konular