2011-06-15 20 views
5

Estoy pensando en guardar documentos cargados en una carpeta fuera de la webroot y alimentar las descargas con un script usando readfile(file).¿Cómo asegurar que un archivo cargado es un documento de MS Word?

Sin embargo, me pregunto si el lo siguiente sería suficiente para eliminar cualquier tipo de amenazas no podrían ser: la gente

$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 
} 

que he leído recomienda el uso de finfo_open(), pero mi servidor está bajo PHP 5.3 .0 así que no puedo usarlo. He intentado usar mime_content_type() pero siempre me arrojará un "texto/plano" con cualquier tipo de archivo que envíe (no sé si estoy haciendo algo mal con eso).

¿Hay algo que pueda agregar para que este sea un proceso más seguro?

Respuesta

2

Una cuestión que inevitablemente encontrarás es que los navegadores pueden etiquetar incorrectamente el tipo de mímico de un archivo. Por ejemplo, hay un error común de Firefox que puede etiquetar la mayoría de los archivos como application/octet-stream aunque el archivo sea genuinamente un documento doc o pdf, o xls, etc. Lo más "seguro" es escanear el lado del servidor de archivos, que también debería incluir un control de virus. Sin embargo, si tiene acceso limitado al servidor, es posible que no pueda hacerlo.

He usado ClamAv (http://www.clamav.net/lang/en/) en el pasado para hacer esto.

Consulte http://sourceforge.net/projects/php-clamav/ para obtener más información.

+0

Me temo que no puedo hacer esto como usted dijo. Estoy en un alojamiento compartido y tengo muchas opciones restringidas. – Filgera

Cuestiones relacionadas