Php fileinfo zararlı dosyaları yükleme önlemek için yeterli mi?

5 Cevap php

Hey guys, ben biraz etrafında arandı, ve gerçekten bu yüzden bu sitede uzmanların bazı görüş almak istedim güvenli fileupload yeteneği var nasıl bir profesyonel tip bir yanıt bulamadı. Şu anda mp3 ve görüntülerin yüklenmesine izin veriyorum, ve ben XSS ve sitemde enjeksiyon saldırıları önlemede oldukça eminim ederken, ben fileupload güvenlik gerçekten aşina değilim. Ben temelde sadece php FileInfo kullanımı ve filetype karşı kabul filetypes bir dizi kontrol edin. Görüntülerde, getimagesize fonksiyonu ve bazı ek kontroller var. Ben kullanıcıların dosyaları kullanmak mümkün istiyorum çünkü kadar saklayarak gibi, ben sadece benim dizin içindeki bir klasör var. Herkes bana bazı ipuçları verebilir eğer ben gerçekten takdir ediyorum.

5 Cevap

Ben genellikle çağırmak ClamAV paylaşılabilir dosyaları kabul ederken. PHP, bu oldukça kolay php-clamav ile gerçekleştirilir.

Yapmak istediğiniz en son şeylerden biri dünya çapında malware yaymak ediyor :)

Eğer bir dosya yükledi sonra arka planda bunu, ama kamu yapmadan önce. Eğer Bu sınıf ile bir cilvesi PHP geleneksel Apache altında çalışıyorsa hemen certainly üzeri sipariş üzerine düşünmek (kıyameti belleğine entire ClamAV virüs tanımı veritabanını yükleyebilirsiniz olduğunu Örneğin başına bellek 120 MB).

beanstalkd yüklenenler taramak gibi bir şey kullanarak sonra onları kamu yapmak için DB güncelleştirmek için bu geçici bir çözüm için çok iyi bir yoldur.


Diğer cevaplar hiçbir şekilde bu bir complete çözüm olmak niyetinde yoktu, yoktu çünkü ben bu sözü. Burada yayınlanan diğer cevaplarına bakınız.

"Kötü niyetli" dosyaları sunucu zarar için tek yol değildir (and if your site is down, it hurts your users).


For example, a possibility to hurt a server would be to upload a lot of very small files :

  • Bu diskteki tüm alanı kullanmak istemem,
  • ama kullanabilirsiniz tüm inodes ...

Serbest hiçbir düğüm olduğunda ... Ve, artık herhangi bir dosya oluşturmak mümkün değil; ki, açıkçası, kötü.


After that, there is also the problems like :

  • telif hakkı
  • Sizin veya kullanıcılara Tamam değil içeriği (nudity ? )

Ama bir "alert the moderator" özelliği oftne yararlı ;-) - Bunun için çok bir teknik çözümler ile orada değil

Hayır, bu kolayca sahte olabilir çünkü. an article bu sunucu bir 1x1 "jpg dosyası" ve nasıl önlemek için yükleyerek saldırıya nasıl açıklar var. İyi okuma.

"Dosya türü" ($ _FILES [''] ['type']) ile başlatmak tamamen anlamsızdır. Bu olabilir ANY VALUE saldırganın istediği edebilirsiniz HTTP post isteği bir değişkendir. Kısa sürede bu çeki kaldırın.

getimagesize () bir görüntünün gerçek olduğunu doğrulamak için mükemmel bir yoldur. Dosyaları komut satırında file /tmp/temp_uploaded_file diyebiliriz, biraz daha zor olabilir geliyor.

Bu zamana kadar Yüklenen bir dosyanın en önemli parçası dosyanın uzantısıdır. Dosya. Php ise, o zaman sadece kesmek var. Bu kötüleşiyor, Apache bunu kabul etmezse ilk dosya uzantısını görmezden, ve sonra bir sonraki uzantısını kullanmak üzere yapılandırılmış olabilir, böylece bu dosyayı normal bir php dosyası idam olacaktır:. backdoor.php.junk. Varsayılan olarak bu devre dışı bırakılmalıdır, ama bu birkaç yıl önce varsayılan olarak etkin oldu.

Sen MUST MUST MUST bir dosya uzantısını Beyaz Liste kullanın. jpg,jpeg,gif,png,mp3 ve aksi takdirde bunu reddetmek: Yani sen gibi dosyaları kullanarak zorlamak istiyorum.

Yapılacak ilk şey, sunucu yapılandırması yoluyla bu dizine herhangi bir sunucu tarafı kodu (örneğin PHP) yürütülmesini devre dışı olacaktır. (Sunucu ilk etapta mime türünü anlamaya olanlar kullandığından beri, veya dosya uzantıları) MIME türleri için bir beyaz liste kurma ve sadece medya dosyaları (HTML değil ya da bir şey) izin XSS enjeksiyonları sizi koruyacaktır. Bir dosya türü çek ile kombine olanlar oldukça yeterli olmalı - Ben aklınıza gelebilecek tek şey bu, görüntü / ses kod çözücüleri sömürmek şeyler ile ve bir virüs tarayıcı yakın bir şey gerekiyordu, bu tespit için alabilirsiniz.