Como subir fotos con PHP de forma segura

Dejar que los usuarios suban imágenes es un tanto peligroso si no tenemos unas buenas medidas de seguridad para que no suban algo que no queremos. En este artículo veremos como subir imágenes en PHPtotalmente seguro.

¿Como crear el formulario HTML para subir el archivo?

Para los principiantes empezaremos con algo básico que será la creación del formulario con el input="file"en HTML. (Si ya sabes como crear un formulario en HTML puedes pasar al otro paso)

Pasamos los datos con el method="post" para que el envío de datos sea “invisible” y más seguro. Como en este caso quiero que la función PHP se ejecute en el archivo donde me encuentro uso la variable $_SERVERque es un array creado por el servidor que contiene datos como el elemento 'PHP_SELF' que nos indica la dirección y nombre de archivo donde se está ejecutando actualmente.

Muy importante es el atributo enctype (enctype="multipart/form-data") que sirve para el control de archivos. Sin este no podrás subir la imagen.

Para subir archivos necesitaremos el input del tipo “file” (si quieres ver los diferentes tipos de input puedes visitar este artículo). El input=”file” debe tener además el atributo name que será el nombre del elemento en el array $_POST[] una vez enviemos el formulario.

Creando la validación PHP antes de ejecutar la función

Antes de que el archivo sea subido, por seguridad debemos pasarlo antes por una validación PHP para ver si cumple con nuestros requisitos.

¿CÓMO HACEMOS LA VALIDACIÓN?, ESO ES FÁCIL, CON EL CONSTRUCTOR IF.

El constructor if lo que nos permite es crear condicionales; lisa y llanamente sería: Si este requisito se cumple, lo ejecuto. Pero como acá no estamos para hablar de if seguiremos con la explicación (si quieren saber más pueden visitar la documentación en PHP.net)

Una vez que hacemos click en enviar, se ejecutará el constructor if, ya que nuestra condicional exigía que la variable $_POST['subir'] existiera (usamos la función isset() de PHP para verificar si una variable existe).

Lo importante para validar nuestro archivo son tres pilares esenciales:

  1. Que realmente se haya subido un archivo.
  2. El archivo sea de un formato permitido.
  3. El peso sea menor al que queremos.

MIME type: en un array() colocamos los MIME type que permitiremos que el usuario suba ($mime = array('image/jpg', 'image/jpeg', 'image/pjpeg', 'image/gif', 'image/png');) mientras que con la función in_array() verificamos si en $_FILES['imagen']['type'] se encuentra los MIME type que tenemos en nuestro array().

La función para subir la imagen

Esta función deberemos colocarla dentro del if(empty($error))

Lo que hacemos con esta función es evitar que los usuarios suban archivos que contengan scripts maliciosos como por ejemplo virus.php.jpg.

Con las funciones end() y explode() separamos la extensión del nombre del archivo.  Al nombre le creamos un hash único con uniqid(microtime()) luego lo encriptamos con md5(), de esta manera nos aseguramos que los archivos tengan una única extensión y que sea la de una imagen. El nuevo nombre del archivo quedaría de esta manera: 1f3870be274f6c49b3e31a0c6728957f.jpg, para que no quede tan largo el nombre lo cortamos a 10 caracteres con la función substr().

CÓDIGO PHP COMPLETO

Les dejo el código PHP completo, si tienen alguna consulta no duden en preguntar

Modificado por última vez el día 26 de diciembre de 2012 a las 07:28
Posted in PHP
Scroll to top