10. Seguridad y Cumplimiento Técnico: MDX-Cloud
Especificación de los mecanismos de seguridad, cifrado y control de acceso implementados en el ecosistema de MDX-Cloud para mitigar riesgos informáticos y garantizar la integridad de los datos.
10.1 Flujo de Autenticación Híbrido (JWT + Cookies Seguras)
Para mitigar ataques de interceptación de sesión como Cross-Site Scripting (XSS) y Cross-Site Request Forgery (CSRF), el flujo de identidad se divide en dos tokens con ciclos de vida independientes:
- Access Token (JWT):
- Duración: 15 minutos.
- Almacenamiento: Memoria volátil de la aplicación React (State).
- Uso: Se inyecta en el header
Authorization: Bearer <token>en cada petición HTTP.
- Refresh Token (Opaco):
- Duración: 7 días (con rotación activa en cada uso).
- Almacenamiento: Cookie de servidor con directivas
HttpOnly,Secure,SameSite=Strict. - Uso: El navegador la envía automáticamente en el endpoint
/api/auth/refreshpara renovar el Access Token sin intervención del usuario.
10.2 Matriz de Restricciones en Infraestructura
[Internet Público]
│
▼ (Anti-DDoS · Reglas WAF · Filtro de Bots)
[Cloudflare WAF — Borde Público]
│
▼ (TLS de Origen — Certificado Cloudflare · Puerto 443)
┌──────────────────────────────────────────────────────────────┐
│ VPS Linux — Ubuntu 24.04 LTS (Host Docker) │
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Caddy 2 (Proxy Inverso — Único punto de entrada) │ │
│ │ HTTP/2 · HTTP/3 · Headers Seguridad · Rate Limiting │ │
│ └──────────────────────┬───────────────────────────────┘ │
│ │ HTTP interno · Puerto 8080 │
│ ┌──────────────────────▼───────────────────────────────┐ │
│ │ Red Privada Docker (mdx-network) │ │
│ │ │ │
│ │ ┌─────────────────────┐ ┌────────────────────┐ │ │
│ │ │ Contenedor .NET 10 │───▶│ Contenedor Postgres│ │ │
│ │ │ Web API Core │ │ Puerto 5432 interno │ │ │
│ │ │ Puerto 8080 interno │ │ (invisible al host) │ │ │
│ │ └─────────────────────┘ └────────────────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
⚠️ Regla de Aislamiento: El contenedor de .NET no expone puertos al host — únicamente es alcanzable desde la red interna de Docker (
mdx-network). PostgreSQL tampoco es accesible desde el exterior bajo ninguna circunstancia. Caddy es el único contenedor con puertos públicos (80,443,443/udp).
10.3 Hardening y Buenas Prácticas de Código (.NET 10)
-
Prevención de SQLi: Todo query que involucre instrucciones dinámicas o extensiones de bloqueo (
FOR UPDATE) debe ser parametrizado estrictamente medianteFormSqlRawo Linq Expressions. Queda estrictamente prohibida la interpolación directa de variables string en sentencias SQL. -
Políticas CORS: La API en producción solo aceptará orígenes explícitos provenientes del dominio de Cloudflare Pages (ej:
https://app.mdxcloud.net). Se rechazarán peticiones de cualquier otro origen salvaje (Access-Control-Allow-Origin: *queda prohibido). -
Esquema de Hashing: Almacenamiento de credenciales administrativas mediante hashing con derivación de claves utilizando Argon2id (mínimo 3 iteraciones, 64MB de memoria).
10.4 Matriz de Clasificación de Datos (Data Classification Policy)
Para prevenir la fuga de información (Data Leak) en dispositivos móviles o equipos robados en campo, la arquitectura de MDX-Cloud rige el almacenamiento local (IndexedDB) bajo un modelo estricto de clasificación a priori. Todos los programadores de React deben tratar las entidades de Postgres bajo una de las siguientes tres categorías:
Nivel 1: Operativo (Texto Plano en Frontend)
Datos públicos o de muy bajo riesgo necesarios para garantizar búsquedas de 0 milisegundos en modo offline.
- Entidades: Catálogo maestro de productos, claves SAT, códigos de barras, unidades de medida, y existencias físicas de almacén (inventario sin costos monetarios).
- Tratamiento: Se almacenan nativamente en
IndexedDBsin encriptación.
Nivel 2: Sensible Comercial (Encriptado en Frontend)
Datos corporativos valiosos regulados por privacidad que son requeridos para la operación de ventas en campo sin internet.
- Entidades: Directorio de clientes (Nombres, teléfonos, RFC), límites de crédito autorizados, saldos vencidos exactos, y matrices de precios especiales (descuentos B2B).
- Tratamiento: Se pueden guardar en
IndexedDB, pero es obligatorio cifrarlos antes de la inserción usando la Web Crypto API (o middlewares comodexie-encrypted). La llave maestra derivará de la sesión del usuario.
Nivel 3: Crítico Restringido (Prohibido en Frontend)
Datos de altísimo riesgo que vulneran el negocio si llegan a manos de la competencia o atacantes.
- Entidades: Costo real de compra a proveedores (márgenes netos), cuentas y claves interbancarias de la empresa, Access Tokens (JWT) y contraseñas (hashes).
- Tratamiento: Cero Almacenamiento Local. Estos datos jamás descienden a
IndexedDB. Su existencia se restringe al contenedor seguro de PostgreSQL y a la memoria RAM de la Web API.