Skip to main content

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:

  1. 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.
  2. 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/refresh para 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 mediante FormSqlRaw o 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 IndexedDB sin 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 como dexie-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.