Un formulario admite un archivo porque su nombre termina en .csv. Después, el proceso de importación descubre que no contiene una tabla válida, consume más recursos de los previstos o intenta interpretar contenido que el producto no necesita.

La extensión es una señal de entrada, no una validación completa. El diseño debe separar recibir bytes, comprobarlos y autorizar su uso dentro del proceso.

1. Define el contrato del archivo esperado

Empieza por el propósito: importar un catálogo, analizar una factura o adjuntar documentación. Cada flujo necesita sus propios formatos, estructura y límites. Admitir cualquier archivo para decidir después amplía innecesariamente lo que tendrá que manejar el sistema.

La guía de carga de archivos de OWASP recomienda combinar controles como tipos permitidos, validación, nombres seguros, límites y almacenamiento apropiado. Ninguna comprobación aislada demuestra que cualquier contenido sea seguro.

Comprueba los requisitos en el servidor. El selector del navegador ayuda al usuario, pero una petición puede llegar sin pasar por ese selector. El tipo MIME declarado por el cliente también debe tratarse como información que necesita contraste.

2. Mantén una zona de recepción separada

Una carga terminada no debería convertirse automáticamente en un documento publicado o en datos incorporados al negocio. Conserva un identificador interno y un estado que distinga recepción, análisis, aceptación y rechazo.

Utiliza un nombre de almacenamiento generado por la aplicación. El nombre original puede mantenerse como metadato de presentación cuando sea necesario, pero no debe controlar rutas ni sobrescribir otro objeto.

Asocia la carga a la cuenta y al proceso autorizado. Un usuario que puede subir un archivo a una solicitud no adquiere por ello permiso para sustituir documentos de otra.

3. Valida estructura además del tipo

Para un catálogo tabular, comprueba cabeceras, columnas necesarias, tipos, codificación y reglas del contrato. Un CSV sintácticamente válido puede seguir siendo un catálogo incorrecto.

Para formatos complejos, usa analizadores mantenidos y limita los recursos que pueden consumir. Un archivo comprimido pequeño puede producir mucho contenido al expandirse. Considera tamaño final, número de elementos, profundidad y tiempo de procesamiento según el formato admitido.

Cuando proceda analizar contenido potencialmente peligroso, hazlo con aislamiento y permisos limitados. Un resultado favorable del análisis no sustituye los controles de formato ni la autorización de negocio.

4. Vincula la decisión a la versión examinada

El archivo aceptado debe ser el mismo que pasó los controles. Si puede reemplazarse entre el análisis y la importación, la comprobación pierde su relación con lo que finalmente se procesa.

Conserva una referencia inmutable o una huella que permita comprobar esa correspondencia. Si el usuario corrige el archivo, registra una nueva versión y vuelve a aplicar los controles necesarios.

El tratamiento de jobs asíncronos ayuda a mostrar el estado de validaciones largas. Evita un mensaje de ‘importación completada’ cuando solo ha terminado la transferencia.

5. Prepara rechazos que permitan corregir el problema

Caso de prueba Respuesta esperada del producto
Extensión admitida y contenido incompatible Rechazo antes del procesamiento de negocio
Archivo con estructura válida pero columnas incorrectas Explicación de los campos necesarios
Límite de tamaño o recursos excedido Interrupción controlada y criterio visible
Archivo sustituido tras validarse Nueva validación o rechazo de la versión inesperada
Carga interrumpida Estado incompleto y limpieza según retención
Usuario de otra cuenta intenta acceder Acceso denegado sin revelar contenido

Los errores deben indicar qué puede corregir el usuario sin mostrar trazas internas ni detalles sensibles. Conserva la evidencia técnica mínima para investigar con permisos adecuados.

6. Comprueba el recorrido posterior

La validación no termina en el almacenamiento. Si después exportas campos a una hoja de cálculo, renderizas documentos o alimentas un extractor, revisa cómo interpreta cada consumidor el contenido.

Una exportación de datos puede necesitar controles de serialización diferentes de los de la importación. El mismo texto atraviesa contextos con reglas distintas.

Si estás preparando una carga de archivos en un backend de datos, comparte con Nexeus Big Data formatos reales, consumidores y errores habituales. Con ese contrato se pueden diseñar controles y mensajes que protejan el proceso y permitan al usuario corregir sus entradas.