Skip to content

Seguridad y Protección de Datos ​

Streamlyra implementa múltiples capas de seguridad para proteger tanto la información de los usuarios como la integridad de las peticiones que recibe el servidor.

Protección de Datos Sensibles (AES-256-GCM) ​

Utilizamos el algoritmo AES-256-GCM para encriptar información sensible antes de guardarla en la base de datos (como tokens de acceso de Twitch o YouTube).

  • EncryptionService: Ubicado en src/services/security/EncryptionService.ts.
  • IV & Auth Tag: Cada encriptación genera un Vector de Inicialización (IV) y un Tag de Autenticación únicos, asegurando que el mismo texto no produzca el mismo resultado cifrado.
  • Formato: Los datos se guardan como iv:authTag:encryptedText.

Autenticación (JWT & Cookies) ​

La sesión del usuario se gestiona mediante tokens JWT (JSON Web Tokens) almacenados en cookies seguras.

  • Seguridad de Cookies: Configuradas como HttpOnly para prevenir ataques de Cross-Site Scripting (XSS).
  • Expiración: Los tokens tienen una vida útil definida para limitar el impacto en caso de robo.

Protección CSRF (Cross-Site Request Forgery) ​

Implementamos un sistema de doble cookie/header para validar peticiones mutables (POST, PUT, DELETE):

  1. El servidor genera un token CSRF aleatorio de 32 bytes
  2. El servidor envía el token de dos formas:
    • En una cookie csrf_token (no-HttpOnly para lectura en same-origin)
    • En el header de respuesta X-CSRF-Token (para clientes cross-origin)
  3. El cliente almacena el token (en memoria para cross-origin, o lee de cookie en same-origin)
  4. El cliente reenvía el token en el header X-CSRF-Token en peticiones mutables
  5. El servidor compara ambos valores (cookie vs header) utilizando crypto.timingSafeEqual para prevenir timing attacks

Soporte Cross-Origin: Esta implementación funciona tanto en entornos same-origin como cross-origin (ej. frontend en Vercel, backend en Render):

  • En same-origin: El cliente puede leer la cookie directamente
  • En cross-origin: El cliente lee el token del header X-CSRF-Token expuesto por CORS y lo almacena en memoria

Capas de seguridad activas:

Protecciones implementadas:

  • CORS valida que las requests vengan del frontend autorizado
  • CSRF valida que el token cookie coincida con el header
  • Timing-safe comparison previene timing attacks
  • SameSite cookies previenen CSRF básico
  • Rate limiting previene brute force

Exclusiones:

  • Métodos seguros (GET, HEAD, OPTIONS) no requieren CSRF.
  • Webhooks (/api/webhooks) están excluidos (validados por firmas HMAC).
  • Peticiones sin autenticación (!!getCookie(req, 'auth_token') === false) no requieren CSRF por diseño del middleware.
  • Ruta de Login: /api/auth/twitch, /api/auth/youtube, etc., están excluidas temporalmente para permitir el establecimiento inicial de la cookie tras el flujo OAuth.

Protección de Propiedad de Conexión (Anti-Stealing): El sistema valida que una cuenta de plataforma no sea vinculada a un usuario si ya pertenece a otro.

  • Si un usuario logueado intenta vincular una red social reclamada, el servidor rechaza con 409 Conflict.
  • Esto previene el robo accidental o malicioso de integraciones entre usuarios.

NOTE

Los webhooks (como /api/webhooks) están excluidos de la validación CSRF ya que provienen de servidores externos confiables y se validan mediante firmas criptográficas propias de la plataforma (ej. firmas HMAC de Twitch).

Rate Limiting ​

Para prevenir ataques de fuerza bruta y denegación de servicio (DoS):

  • API General: Límites estándar para la mayoría de los endpoints.
  • Auth & Webhooks: Límites más estrictos en rutas críticas de inicio de sesión y recepción de datos.

Validación de Esquemas (Zod) ​

Todas las entradas de la API se validan antes de llegar a la lógica de negocio usando Zod. Si un cliente envía datos malformados o sospechosos, el servidor responde automáticamente con un error 400 Bad Request, evitando procesar entradas no confiables.

Liberado bajo la Licencia MIT.