Güvenli PHP dosyası yükleme

6 Cevap php

Ben bizim sunuculara any dosya yüklemek sağlayan yeni sitede bir dosya yükleme modül geliştirmeye çalışıyorum. Yüklenen dosya, /files yüklenir olduğu bir php dosyası yani yürütme engellemek için aşağıdaki htaccess..:

<Files *.*>
ForceType applicaton/octet-stream
</Files>

Bu tarayıcıları (en azından FF ve Safari) pencere indir tetikler, ancak dosya bu yöntemi kullanarak sunucu üzerinde çalışan olmayacak varsaymak güvenlidir? Eğer değilse, nasıl böyle bir çözüm uygulamak istiyorsunuz?

6 Cevap

bu dosya bu yöntemi kullanarak sunucu üzerinde çalışan olmayacak varsaymak güvenlidir?

Tür, ancak diğer direktifleri yapılandırma mevcut ne bağlıdır; belki PHP dosyaları çalıştırmak için izin verecek şekilde ayarlanmış diğer kurallar vardır. PHP sağlayan konum tek yönlü dosya türüne PHP işleyicisi tuşlayarak ise, o PHP yürütme durdurmak gerekir.

Ancak, yürütme PHP durdurma sadece bir endişeleri olduğunu. Filetype masum bir görüntü olduğunu söylüyor - bile - insanlar gibi HTML veya Flash gibi etkin içerik içeren dosyaları upload, eğer cross-site scripting (XSS) aracılığıyla sitenizde diğer kullanıcıların oturumları kontrol elde edebilirsiniz. http://stackoverflow.com/questions/602539/stop/602904#602904 Bu bir tartışma için bkz.

Hep '1234 gibi olmayan, kullanıcı tarafından sağlanan dosya altında dosyaları depolamak ile birleştiğinde indir kutusunu tetiklemek için Content-Disposition kullanan bir 'download.php' arabirim. Dat ', çok daha güvenlidir.

Ben güvenli şey dizine% 100 web erişimi kısıtlamak ve daha sonra uygun olanı dosyası ve tarayıcı çıkışlar onu getirir bir dosya id geçtiği download.php gibi bir komut dosyası var olduğunu düşünüyorum. Ancak, ne var çalışmak ve güvenli olacaktır eminim.

Ben aslında bu istediğiniz düşünüyorum:

<Directory /path/to/files>
    SetHandler default-handler
</Directory>

Ne var sunucu özellikle bunu söyledim sürece bir şey yürütmek için değil, varsayılan olarak yapılandırıldığı için, pratikte işe yarayabilir, ama gerçekten hiçbir şey idam olacağı garanti etmez. ForceType sadece statik dosyalar için içerik türünü (emin değilim, ama çalıştırılabilir komut etkilediği şüphe) ayarlar.

Paolo'nun cevabı seconding, erişilebilir yolun dışına dosyaları dizinine taşıyın. Daha sonra dosyaları hizmet etmek PEAR'ın HTTP_Download modülünü kullanarak download.php komut dosyası yazabilirsiniz.

Ben onun yol daha güvenli, Paolo katılıyorum. Birisi bir tarih birini çalıştırmak için PHP dosyalarınızı istismar sorunu her zaman vardır. Kötü Örnek:

include_once("/modules/".$_GET["module"].".php");

Nerede module=../Files/exploit geçirilen birisi

Maksimum güvenlik için, yüklenen dosyalar no-exec bayrağı ile ayrı bir bölümünden monte edilebilir içeren klasörü shuold.