2011-06-15 34 views
5

Yüklenen dokümanları webroot dışındaki bir klasöre kaydetmeyi ve indirme işlemlerini readfile(file) kullanarak bir komut dosyasıyla beslemeyi düşünüyorum.Yüklenen bir dosyanın MS Word belgesi olduğundan nasıl emin olunur?

$filename = basename($_FILES['uploaded_file']['name']); 
$ext = substr($filename, strrpos($filename, '.') + 1); 
if (($ext == "doc") && ($_FILES["uploaded_file"]["type"] == "application/msword")) 
{ 
execute rest of the code 
} 

okudum insanlar finfo_open() kullanılarak önerilir, ancak benim sunucu php 5.3 altındadır:

Ancak, şu her çeşit tehdidi kaldırmak için yeterli olacağını merak ediyorum olabileceğini .0 kullanamam ki. mime_content_type() kullanmayı denedim ama her zaman gönderdiğim herhangi bir dosya ile bir "text/plain" atar (Bu konuda yanlış bir şey yapıp yapmadığımı bilmiyorum).

Bunu daha güvenli bir işlem haline getirmek için ekleyebileceğim bir şey var mı?

cevap

2

Kaçınılmaz olarak karşılaşacağınız bir sorun, tarayıcıların bir dosyanın mim türünü uygun olmayan şekilde etiketleyebilmesidir. Örneğin, dosya gerçekten de bir doc veya pdf veya xls dosyası olsa bile, çoğu dosyayı uygulama/octet-stream olarak etiketleyebilen yaygın bir Firefox hatası vardır. Yapılması gereken en güvenli şey dosya sunucusu tarafını taramaktır. Ayrıca bir virüs kontrolü içermelidir. Ancak sınırlı sunucu erişiminiz varsa bunu yapamayabilirsiniz.

Bunu yapmak için geçmişte ClamAv (http://www.clamav.net/lang/en/) kullandım.

Daha fazla ayrıntı için http://sourceforge.net/projects/php-clamav/ adresine bakın.

+0

Korkarım ki bunu söylediğiniz gibi yapamam. Paylaşılan bir barınağa sahibim ve kısıtlı birçok seçeneğim var. – Filgera

İlgili konular