Como validar los archivos subidos con PHP

php.jpg
Solucionex
31
Ago 09

Cuando subimos un archivo al servidor mediante PHP es muy importante realizar una validación del tipo de fichero que se está subiendo. Si no validamos el fichero subido estaremos poniendo en riesgo nuestro sistema y estaríamos dejando abierta una puerta de ataque para usuarios maliciosos.

¿Como validamos un archivo subido con PHP? Como mínimo hay que realizar una validación en el servidor. También podríamos hacerla en el cliente, pero este tipo de validaciones son muy sencillas de romper. Por lo que siempre hay que validar en el servidor aunque opcionalmente se pueda validar también en el cliente.

Un ejemplo de validación en el cliente usando javascript podría ser por ejemplo esta:

function validar(archivo){ var aux = archivo.split(‘.’);    if(aux[aux .length-1] == ‘txt’)       return true;    else{       alert(‘El archivo debe ser .txt’);       return false;    } }

El ejemplo anterior muestra como validar un fichero de texto mediante javascript. Esta validación es muy vulnerable, bastaría con desactivar el javascript del navegador para obviarla.

Para validar los archivo en el servidor se podría hacer una función parecida a la anterior en código PHP, pero esto seria incorrecto. No podemos validar los archivo basándonos en la extensión del mismo, ya que esto es muy fácil de modificar y un usuario malicioso podría subir un fichero con extensión .txt y luego resultar que es un archivo .php. Para solucionar este problema hay que realizar la validación de los archivo comprobando el mime-type. El mime-type de un archivo es una información que esta incluida en la cabecera del archivo. PHP es capaz de acceder a esta información para verificar dicho tipo.

Para realizar la validación en el servidor correctamente, tenemos que verificar si el archivo que estamos subiendo tiene el mime-type que deseamos. Para ello antes de realizar la operación mode_uploaded_file() debemos hacer la validación por su mime-type.

if($_FILES[‘campo-formulario’][‘type’]==”text/plain”){ //movemos el achivo al directorio destino mode_uploaded_file(“directorio destino”) }

Mediante la variable de servidor $_FILE podemos saber el mime-type de fichero que estamos subiendo.

En este enlace podéis encontrar los mime-type mas usados Lista de MimeTypes.

Como veis, realizar una validación correcta cuando subimos archivos a nuestro servidor, en muy sencillo. Por lo tanto no olvidéis hacerla ya que os evitara muchos problemas.