Política de seguridad
Alcance
Este repo tiene dos partes con riesgo distinto:
- 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.
- 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+CACHEdel 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.