Curso explícitamente defensivo: se explica cómo funciona cada ataque porque no se puede defender lo que no se entiende. Inyección SQL, XSS, contraseñas y hashing lento, sesiones y JWT, control de acceso roto, CSRF, cabeceras de seguridad, dependencias y secretos, registro y detección, y modelado de amenazas con STRIDE. Los seis laboratorios son reales, no simulaciones: el evaluador de SQL evalúa el árbol de la condición, el hashing usa el SHA-256 del navegador, el JWT se firma con HMAC y se verifica de verdad, y el laboratorio de XSS muestra la violación de CSP capturada del evento real del navegador. Todo corre contra sistemas de juguete dentro de la propia página: nada de lo que se enseña aquí se prueba en sistemas ajenos, que sin autorización escrita es delito (Ley 21.459).
Temario 目次
Nivel 1 — Inyección
Cuando el dato se vuelve códigoÉtica, Ley 21.459 y por qué los laboratorios son de juguete. Qué defensas valen y cuáles no.
Laboratorio con evaluador real de la cláusula WHERE. Rompe el login y luego parametriza.
El mismo texto en dos sinks, ejecutándose de verdad, y la CSP bloqueando delante de ti.
Nivel 2 — Identidad
Contraseñas, sesiones y permisosPor qué SHA-256 es la respuesta equivocada. Sal, avalancha y entropía, calculadas en vivo.
Fabrica un JWT y engaña a un verificador ingenuo con alg:none. Cookies atributo a atributo.
La número 1 de OWASP y la más aburrida: cambiar un número en la URL. Con laboratorio de rutas.
Nivel 3 — Perímetro
Origen, cabeceras y cadena de suministroTu propio navegador trabajando para el atacante. SameSite, tokens y verbos.
CSP con nonce, HSTS, nosniff. Y la CSP con unsafe-inline que no protege de nada.
El código que no escribiste y la credencial que queda en el historial de git para siempre.
Nivel 4 — Cierre
Detección y métodoQué registrar, qué no registrar jamás y por qué el log debe ser de solo inserción.
Ejercicio de cierre: modela una plataforma multi-tenant y sus dos capas de aislamiento.
Por qué ves candados. El acceso no se deduce de una orden pagada sino de un entitlement activo, y esta sesión no tiene uno para este curso. Entra como ana@criswily.local para verlo desbloqueado y como bruno@criswily.local para comprobar que el bloqueo es real — los dos son del mismo tenant, así que la diferencia no la puede hacer el aislamiento por tenant.
