Nasıl bir web sitesi PHP kullanarak resim yükleme sunmaktadır zaman istenmeyen dosyaları engellemek için?

3 Cevap php
if ((($_FILES["uploadedfile"]["type"] == "image/gif")
|| ($_FILES["uploadedfile"]["type"] == "image/jpeg")
|| ($_FILES["uploadedfile"]["type"] == "image/pjpeg"))
&& ($_FILES["uploadedfile"]["size"]/1024<100))

Ben yukarıdaki kodu test ederken, bir kullanıcı sadece nasıl gerçek dosya uzantısı adını almak için uzantı adı, değiştirerek dosya türü denetimi atlayabilir bulundu?

Bir kullanıcı çok büyük bir dosya yükler zaman da, nasıl hemen sunucu tarafında yükleme reddetmek için?

3 Cevap

Eğer bir kullanıcı girişi çünkü gerçekten doğru mimetype adlı dosya türünü alamıyor ve kolayca unutmak olabilir. Ne yapabilirim gerçek bir jpeg veya gif dosyaları emin olmak için * nix file komutunu kullanmaktır. Aynı şekilde size GD (görüntü uzantısı) veya Image magic ile yüklemek için deneyebilirsiniz.

dosya çıktısı örneği

olivier@olivier-laptop:~/trust/public/images$ file verisign_sample.gif 
verisign_sample.gif: GIF image data, version 89a, 100 x 60

backtice operatörünü kullanarak Eğer sonuç almak ve bunu ayrıştırmak mümkün olacaktır

$line = `file $filepath`

İkinci soru için tarayıcı isteği yaparken içerik boyutunu sağlamak zorunda değilsiniz RFC, tarayıcıya bağlıdır, yani dosya çok büyük eğer yükleme duramazsın. Bu PHP yükleme limit (php.ini upload_max_filesize parametresi) ulaşır ve PHP isteği öldürecek kadar upload olacaktır.

Gerçekten de, bir kullanıcı dosya uzantısını değiştirerek dosyası kontrolünü atlayabilirsiniz. Bu iki nedenle, bu kesinlikle olamaz yani, kullanıcı-temin edilebilir gibi anything, "isim" veya $_FILES "type" da altında bulunan bu güvenemez güvenilir kabul.

RageZ işaret ettiği gibi, dosya türünü belirlemek için file komutunu kullanın veya GD veya benzeri bir şey ile görüntü yükleme deneyebilirsiniz. Ayrıca kendinize header dosyasına bakabilirsiniz: Bu here yapıyor ilginç bir makale var

Sadece görüntü yüklenenler sağlamak istiyorsanız, o zaman getimagesize() kullanarak dosya türü için kontrol ve image_type_to_mime_type().