La funcionalidad de subida de archivos (File Upload) es un vector de ataque crítico si no se implementan controles estrictos sobre el tipo, contenido, nombre y tamaño de los archivos.
Riesgos de Seguridad
- Remote Code Execution (RCE): Si el servidor web está configurado para ejecutar scripts (como PHP, ASP, JSP) en el directorio de subidas, un atacante puede subir una Web Shell y tomar control total del sistema operativo.
- XSS Stored (Client-Side): Subir archivos HTML, SVG o XML con scripts incrustados. Cuando otro usuario visualiza el archivo, el script se ejecuta en el contexto del dominio de la aplicación.
- Denegación de Servicio (DoS): Subida de archivos masivos para agotar el espacio en disco o el ancho de banda.
Estrategias de Validación Segura
Para mitigar estos riesgos, se debe aplicar una defensa en profundidad:
- Lista Blanca de Extensiones: Permitir explícitamente solo extensiones seguras (ej.
.jpg,.png,.pdf). - Validación de Contenido (Magic Bytes): Verificar la cabecera del archivo para asegurar que coincide con la extensión.
- Renombrado Aleatorio: Guardar el archivo con un UUID generado por el sistema para evitar colisiones y ejecución directa basada en nombres predecibles.
- Almacenamiento Externo: Servir los archivos desde un dominio diferente o un bucket S3 para aislar el riesgo de XSS.