Compartiendo conocimiento y experiencias

Como validar los archivos subidos con PHP

categoría:

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:

  1. function validar(archivo){
  2.    var aux = archivo.split(.);
  3.    if(aux[aux .length-1] == ‘txt’)
  4.       return true;
  5.    else{
  6.       alert(‘El archivo debe ser .txt’);
  7.       return false;
  8.    }
  9. }

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.

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

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.

Enviar un comentario nuevo

El contenido de este campo se mantiene privado y no se mostrará públicamente.
  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato


CAPTCHA
Esta pregunta se hace para comprobar que es usted una persona real e impedir el envío automatizado de mensajes basura.
CAPTCHA de imagen
Enter the characters shown in the image.

Comentarios recientes

Apoyamos

Drupal Association

Drupalcamp Bacelona 2010

Cáceres 2016