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

Inicio / Seguridad / 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

Director Académico y Docente at Leeway Academy
Hola! Soy Mauro Chojrin, estudié la Lic. en Ciencias de la Computación en la Universidad de Buenos Aires.

Me desempeño como docente de programación desde el año 1997.

Pasé por diferentes instituciones (Escuela Técnica ORT, Digital House, EducacionIT, ITMaster, Escuela DaVinci entre otros).

Actualmente coordino los cursos dictados en Leeway Academy y desarrollo sistemas usando PHP y framework Symfony

Un comentario

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

A %d blogueros les gusta esto: