- Inicio
- Habilidades
- Seguridad
- Seguridad de Carga de Archivos
Seguridad de Carga de Archivos
Asegura implementaciones de carga de archivos — validacion de contenido, aislamiento de almacenamiento, prevencion de malware y control de acceso.
El Problema
La carga de archivos es una de las funciones mas peligrosas de implementar. Los atacantes suben shells PHP disfrazadas como imagenes, archivos SVG con JavaScript, zip bombs que consumen todo el espacio en disco o documentos maliciosos que explotan el rendering del servidor. La extension, tipo MIME e incluso los primeros bytes de un archivo pueden ser falsificados. Sin validacion de contenido, aislamiento de almacenamiento y control de acceso, un endpoint de carga se convierte en un camino directo a ejecucion remota de codigo.
El Prompt
Eres un especialista en seguridad de carga de archivos. Audita mi implementacion de carga y disena un pipeline de upload seguro.
PLATAFORMA: [ej. Node.js/Multer, Python/FastAPI, PHP, S3 upload directo]
ARCHIVOS ACEPTADOS: [ej. imagenes (JPEG, PNG), PDFs, CSV, cualquier documento]
ALMACENAMIENTO: [ej. sistema de archivos local, S3, Cloudflare R2, blob de base de datos]
PROCESAMIENTO: [ej. redimensionar imagenes, rendering PDF, parsing CSV, escaneo de virus]
CODIGO:
[pega handler de upload, logica de validacion, configuracion de almacenamiento y codigo de servicio de archivos]
Auditar estos controles de seguridad de carga:
1. **Validacion de contenido**: Verificacion de magic bytes, no solo extension/MIME?
2. **Limites de tamano**: Tamano maximo aplicado en reverse proxy Y aplicacion?
3. **Sanitizacion de nombre**: Prevencion de path traversal, generacion de nombres aleatorios?
4. **Aislamiento de almacenamiento**: Archivos almacenados fuera del web root? Dominio separado para servir?
5. **Prevencion de ejecucion**: Servidor web configurado para nunca ejecutar archivos subidos?
6. **Especifico de imagenes**: Re-codificar imagenes para eliminar EXIF y scripts embebidos?
7. **Manejo de archivos**: Proteccion contra zip bombs, limites de profundidad de extraccion?
8. **Escaneo de virus**: ClamAV o escaneo basado en nube antes del almacenamiento?
9. **Control de acceso**: Verificacion de autorizacion antes de servir? URLs firmadas?
10. **Rate limiting**: Frecuencia de carga y limites de almacenamiento total por usuario?
Para cada hallazgo, proporcionar escenario de ataque e implementacion segura.
Ejemplo de Salida
## Auditoria de Carga de Archivos: 5 hallazgos
### CRITICO: Sin validacion de tipo de contenido
Solo se verifica la extension — atacante renombra shell.php a shell.jpg.
Solucion: Validar magic bytes: JPEG empieza con FF D8 FF, PNG con 89 50 4E 47.
### ALTO: Archivos almacenados en web root
Archivos subidos en /public/uploads/ son directamente accesibles y ejecutables.
Solucion: Almacenar fuera del web root, servir via controller con Content-Disposition: attachment.
Cuando Usar
Auditar seguridad de carga antes de lanzar cualquier feature de upload, al cambiar backends de almacenamiento o al extender tipos de archivo aceptados. Esencial para aplicaciones con avatares de usuario, carga de documentos o galerias de medios.
Tips Pro
- Nunca confies en la extension — valida el contenido leyendo magic bytes. Un archivo llamado foto.jpg puede contener un webshell PHP.
- Sirve desde un dominio separado — aloja archivos subidos en un origen diferente para que scripts embebidos no accedan a las cookies de tu aplicacion principal.
- Re-codifica imagenes — usa Sharp, Pillow o ImageMagick para re-codificar imagenes subidas, eliminando scripts embebidos, datos EXIF GPS o payloads polyglot.
- Implementa cuotas de almacenamiento — sin limites por usuario, un atacante puede llenar tu disco con uploads que parecen legitimos.