Lección 16 de 32· M18

Hechas: 0/32(0%)

M18L16Semana 4~5 h

Ficha M18

L16 — XSS almacenado y escape en plantillas/API

~5 h · Semana 4

Objetivo

Mitigar XSS (cross-site scripting) (escape, sanitización acotada, CSP (Content Security Policy) futura) en el flujo almacenado (notas de cita, perfil).

Por qué importa

El CRM (gestión de relación con clientes) guarda texto que vuelve a listarse; ahí vive el stored XSS.

Conceptos

  • Sanitizar HTML vs texto plano.
  • JSON no implica seguro en dangerouslySetInnerHTML.
  • Headers X-Content-Type-Options.

Pasos (hazlos en orden)

1. Lectura dirigida (60–90 min)

Lee la sección indicada en la ficha de la materia y subraya solo lo que vas a probar hoy en terminal o en projects/.

2. Carpeta de evidencia (15–20 min)

Crea o actualiza la carpeta del proyecto de la materia. Cada lección añade una sección en la bitácora semanal o un archivo dedicado; no disperses notas sueltas.

3. Laboratorio / trabajo documental (90–120 min)

Si hay notas/comentarios en citas, prueba almacenamiento. Fix en template/API (interfaz de programación de aplicaciones). Test: payload guardado se muestra escapado.

Tabla P2 en projects/m18-appsec/findings-table.md con filas SQLi (inyección SQL) + XSS (hallazgo → PoC (prueba de concepto) → commit → test).

4. Conexión con el plan (30–45 min)

Escribe un párrafo en la bitácora: cómo lo de hoy afecta al piloto Agenda Ops (M12 en adelante) o a la API que desplegarás en M17/M19. Si aún no tienes SRS (especificación de requisitos de software), usa el escenario del producto del plan (citas, clientes, panel).

5. Commit atómico (15 min)

git add projects/
git status
git commit -m "docs(m18): l16 xss-almacenado-y-escape-en-plantillas-ap"

Lectura de esta lección

Fuente Qué leer Alternativa
OWASP (proyecto abierto de seguridad en aplicaciones web) XSS Prevention MDN (Mozilla Developer Network) textContent
Catálogo Entrada M18 Bibliografía · M18

Hecho cuando

  1. ≥2 filas en findings-table.
  2. Fix committed.
  3. Test o verificación manual repetible.

Errores comunes

  • strip_tags inventado.
  • innerHTML con input usuario.

Siguiente

L17 — IDOR en citas y recursos por ID

←→