A7: Cross-Site Scripting (XSS) · 2017
Contenido controlado por un atacante se ejecuta como código en el navegador de otra persona, permitiendo robo de sesión, suplantación o modificación de la interfaz.
Resumen
Contenido controlado por un atacante se ejecuta como código en el navegador de otra persona, permitiendo robo de sesión, suplantación o modificación de la interfaz.
Cómo funciona el ataque
Un comentario se inserta como HTML sin escape; el navegador interpreta el contenido del usuario como código en el sitio.
Ejemplo
Vulnerable · Pseudocódigocomment = request.body["comment"]
comments.save(comment)
feed.innerHTML = comments.latest()Corrección: Usar textContent o escape contextual; sanear HTML permitido y añadir CSP como defensa adicional.
Prevención
- Codificar la salida según el contexto HTML, atributo, URL o JavaScript.
- Usar plantillas con escape automático y sanear HTML cuando sea imprescindible.
- Aplicar una Content Security Policy restrictiva como defensa adicional.
Linaje
- 2013 · A1: Injection Continúa en 2017
- 2013 · A3: Cross-Site Scripting (XSS) Baja al puesto 7 en 2017
- 2017 · A1: Injection Continúa
- 2017 · A7: Cross-Site Scripting (XSS) Se integra en Injection
- 2021 · A03: Injection Absorbe XSS
- 2025 · A05: Injection Baja desde el puesto 3
- 2013:A1 → 2017:A1: Injection conserva el primer puesto.
- 2013:A3 → 2017:A7: XSS baja del puesto 3 al 7.
- 2017:A1 → 2021:A03: Injection baja del puesto 1 al 3.
- 2017:A7 → 2021:A03: XSS se integra dentro de Injection.
- 2021:A03 → 2025:A05: Injection baja del puesto 3 al 5.