Algunas consideraciones de seguridad cuando se suben archivos vía PHP

Home / Buenas prácticas / Algunas consideraciones de seguridad cuando se suben archivos vía PHP

Php permite subir archivos vía HTTP de un modo bastante simple (Si tenés dudas consultá acá).

Un uso bastante común de esta funcionalidad es la de permitir al visitante ingresar imágenes, por ejemplo: su foto de perfil.

Existe una serie de consideraciones respecto de la seguridad a tener en cuenta cuando se realiza una tarea de este tipo.

Con estas medidas estamos intentando evitar que un atacante engañe a nuestro sistema subiendo código malicioso que podría, por ejemplo, darle acceso a información privilegiada.

Validar que el archivo recibido sea del tipo esperado

Lo primero de lo que querremos estar seguros es de que el archivo que acabamos de recibir sea efectivamente una imagen (GIF, JPG, etc…). La forma inocente de hacer esta verificación es a través del nombre del archivo (si las últimas tres letras son…).

La forma correcta de hacer esta verificación es a través del mime-type (Ver acá para más información).

No almacenarlos en un directorio accesible públicamente

En general, es conveniente que los archivos recibidos desde terceras partes (especialmente cuando se trata de visitantes), sean almacenados fuera del directorio raíz de nuestro proyecto.

Desde un script de nuestro proyecto siempre se puede abrir un archivo con algo como:

fopen(__DIR__.'/../uploads/foto.jpg');

Contar con un método propio para ver su contenido

Por último, es conveniente contar con algún método (puede ser un script especialmente diseñado para este efecto) que reciba como parámetro el nombre del archivo que se está solicitando y devuelva su contenido.

Por ejemplo:

showFile.php:

<?php

echo file_get_scontents($_GET['f']);

De este modo, si alguien lograra de algún modo subir código malicioso, al intentar ejecutarlo se encontraría con que en su navegador se vería su propio código (sin haber sido ejecutado nada).

mchojrin

CEO at Leeway
Mauro es Lic. en Ciencias de la Computación.
Su carrera como docente de programación se inició en el año 1997 en la Escuela Técnica ORT.
Actualmente coordina el desarrollo de proyectos web en Leeway y los cursos dictados en la Leeway Academy

One Comment

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *