Desarrollo Web: Una pequeña función en PHP para filtrar ficheros que van a ser subidos al servidor

En algunos proyectos he tenido que crear scripts para que el usuario web suba ficheros al servidor como por ejemplo una imagen.

Una de las medidas básicas de seguridad es impedir que suba ficheros que puedan ser ejecutados en el servidor, p.ej. fichero.php. Ya que el código contenido en el mismo podría ser ejecutado si se carga esa página.

Para ello he creado una función que analiza el nombre del fichero y devuelve un valor booleano (true o false) para decirnos si el fichero está permitido o no.

En esta función tenemos un array que contiene las extensiones prohibidas, en mi caso he prohibido la extensión .php, la extensión .htm y la extensión .html.

La función es muy sencillita -y seguramente muy mejorable-. Aquí os pongo el código:


<?php
# Function to validate an extension as good to upload
function AllowedExtension($value){

$ret=true;

$extensions = array(".php",".htm",".html");

for($i=0;$i<$extensions.length;$i++){
if($extensions[$i]!=value&&$ret==true){
$ret = false;
}
}

return $ret;
}

?>

Comentarios

Anónimo ha dicho que…
Es preferible indicar en el array las extensiones PERMITIDAS. De esta forma la función actúa de un modo más restrictivo. Tal y como está ahora la función te podrían colar un asp, aspx, exe, cgi, etc.
Gabriel Cuesta ha dicho que…
Pues la verdad es que tienes razón. Cuando se me descongelen los dedos cambiaré la función como dices, tiene más sentido.