Las secuencias de comandos entre sitios son secuencias de comandos entre sitios: la diferencia entre DOM / persistente / reflejado es solo en cómo se realiza (y se evita) el ataque.
La amenaza es la misma: un atacante de alguna manera ha inyectado javascript malicioso en páginas que no deberían poder controlar, generalmente debido a vulnerabilidades en el diseño del sitio web.
Tome el ejemplo de OWASP , donde la página HTML incluye algunos javascript en línea (parte dentro de las etiquetas) . El propósito del javascript en línea fue a una variable del parámetro de consulta "predeterminado" y usar su valor para modificar el DOM, que es cambiar el valor de la primera etiqueta <option>
al valor de ese parámetro de consulta.
El origen de la página web (enviado a través de la red) se parecía a:
Select your language:
<select><script>
document.write("<OPTION value=1>"+document.location.href.substring(document.location.href.indexOf("default=")+8)+"</OPTION>");
document.write("<OPTION value=2>English</OPTION>");
</script></select>
pero después de ser visto desde http://www.some.site/page.html?default=French
, el DOM se convertiría en:
Select your language:
<select>
<OPTION value=1>French</OPTION>
<OPTION value=2>English</OPTION>
</select>
Lo que significa que su navegador web trata la página web como la anterior se envió a través de la red una vez que ejecutó el JavaScript que modifica el DOM (las llamadas a document.write
).
Ahora, un atacante inteligente envía un enlace (por correo electrónico / enlace a la página web) en el que una víctima hace clic en apuntando a http://www.some.site/page.html?default=<script>alert(document.cookie)</script>
. Luego, la página web en la página (después de procesar el javascript inicial con el document.write
) se ve así:
Select your language:
<select>
<OPTION value=1><script>alert(document.cookie)</script></OPTION>
<OPTION value=2>English</OPTION>
</select>
Nuevamente, alert(document.cookie)
podría ser cualquier javascript arbitrario que el atacante desee.
Tal vez haya un nombre de usuario / contraseña o una cookie de sesión o un número de tarjeta de crédito en la página, y en lugar de avisarle, vincule el botón enviar a una llamada ajax para que cuando el usuario presione enviar, envíe todos los datos secretos a Un servidor al que el atacante puede acceder.
Realmente no hay un peor escenario: cualquier acción que pueda hacer con javascript que debería poder hacer si existe una vulnerabilidad DOM-XSS.