Seguridad

SECURITY — Política de seguridad

Política de seguridad

Alcance

Este repo tiene dos partes con riesgo distinto:

  1. El sitio (site/): un renderizador estático (Python stdlib) y JS de navegador

vanilla, sin backend, sin base de datos y sin datos de usuarios. No hay superficie clásica de ataque (no hay login, ni APIs que acepten datos, ni cookies de sesión). El único dato personal que se trata es el de la propia política de privacidad: preferencia de consentimiento y tema en localStorage, y Google Analytics (G-8R9VHZWTXL) solo si el visitante acepta estadísticas, con IP anonimizada.

  1. El contenido del curso (lessons/, memory/): material educativo que describe

seguridad de forma intencionada (OWASP, secretos, RGPD...). Los ejemplos son didácticos y pertenecen al proyecto ficticio TicketFlow.

Cómo reportar

  • Vulnerabilidad en el sitio o en las herramientas (site/tools/): abre un

security advisory privado en GitHub. No lo publiques en un issue público.

  • Contenido malicioso o un ejemplo peligroso (p. ej. un snippet inseguro presentado

como buena práctica): un issue normal es suficiente, marcado con el asunto security: al principio.

Incluye siempre: página o fichero afectado, pasos para reproducir, impacto esperado y, si existe, una propuesta de corrección.

Qué esperar

  • Acuse de recibo en 48 horas.
  • Si se confirma: corrección y publicación del advisory (con crédito si quieres) en un

plazo razonable según la gravedad.

  • Si no procede (fuera de alcance, riesgo teórico): explicación del porqué.

Decisiones de diseño relevantes para seguridad

  • Cero dependencias en runtime del generador/renderizador (Python stdlib): la cadena

de suministro se reduce a Python y los dos runners del CI.

  • Sin JavaScript para contenido: las lecciones son HTML servido o congelado; nada se

ejecuta en el navegador para leer el curso.

  • Consentimiento antes de rastrear: ningún script de terceros se carga antes de que

el usuario acepte estadísticas en el banner; sin aceptación no hay petición a googletagmanager (ver privacidad).

  • Estáticos versionados (?v=N + CACHE del service worker) y **CI como red de

seguridad** (tests, enlaces, axe, Lighthouse en cada push).

  • Secretos: no debería haber ninguno en el repo (el ID de medida de GA es público por

diseño). Si encuentras uno, repórtalo como el caso 1.