Php güvenli dosya yükleme komut nasıl yapılır?

2 Cevap php

ben onun uzantısı için dosyayı kontrol ve mim türü - Başka bir şey var i dosya yüklenenler daha güvenli hale getirmek için yapıyor olabilir?

onun bir avatar için (yani tüm görüntüleri tek bir klasörde). i bazı php dosyası var onun yolunu buldu sadece örtmek herhangi bir php yürütülmesine yasaklamak htaccess kullanarak düşünüyordum. sen ne düşünüyorsun?

2 Cevap

Dosya uzantısı ne de mime türü ne size bir resim dosyası ile ilgileniyor% 100 güvenlik verebilir. Ama sürece (() dahil kullanarak örneğin) dosyasını çalıştırmak için gitmiyorsun gibi, bu bir sorun değil ve PHP kodu veya başka bir şey için kontrol etmek gerekmez. Bir sahte imaj dosyasını kullanarak hayal sadece güvenlik ihlali the browser's render motoru patlatır şey olurdu. Bu sunucu tarafında karşı etkili korumak imkansızdır ve tarayıcı satıcının sorumluluğundadır.

Yani, sürece en azından görüntü formatı cephesinde, is_uploaded_file() ile yükleme tutarken move_uploaded_file() ince olmalıdır kullanmak emin olarak. Dosyaları ile uğraşırken, aşağıda bobince en yazılan @ okuyup bağlantıyı takip emin olun, diğer güvenlik konuları ile ilgili büyük bilgi bir sürü içerir.

Ancak, tamamen maksimum güvenlik sağlamak elbette GD'nin imagecopy kullanarak yeni bir görüntü kabın içine görüntü kopyalamak için olabilir. Bu, herhangi bir ID3 ve dosyada bulunan diğer başlık bilgilerini silmek, ve muhtemelen herhangi bir girişimleri (GD muhtemelen böyle bir dosya üzerinde boğulur ve bir hata dönecekti) istismar mahveder. Bu sadece, tabii ki GIF, JPEG ve PNG için çalışır, ve alfa kanalı ve renk profil sorunları gibi bazı konuların içine çalıştırabilirsiniz.

  1. Hiç kullanıcı gönderilen dosya isimlerini asla kullanmayın; «rasgele sayı». jpeg gibi yenilerini yapmak. App bir Windows sunucu üzerinde çalışabiliyor olması gerekir özellikle 'Dezenfeksiyon' dosya isimleri, düşündüğünüzden daha zor.

  2. Görüntülerde, bir görüntünün, tipini belirlemek yerine, son derece güvenilmez dosya ve mimetype gönderimler bakarak PHP getimagesize işlevini kullanabilirsiniz. Görüntü olarak ayrıştırmak değil yüklenenler izin verme.

  3. Indirilebilir amaçlanmıştır dosyaları, IE HTML içeriği için koklama ve tarayıcıda görüntüleyerek durdurmak için Content-Disposition: attachment başlığını kullanabilirsiniz.

  4. Eğer güvenlik bağlamında içine olabilir çapraz-site betik içlerinde, ana site için farklı bir hostname aksi HTML içeriği onlara hizmet etmek gerekir satır içi göstermek gerekir dosyalar için.

Bir dosya yükleme özelliği güvenli yapıyor hard. More discussion.