Los ataques XSS se basan en el hecho de que la entrada se convierte en salida para el navegador del usuario final. El ataque más común es básicamente un sitio PHP que contiene
<?php
echo $_GET["message"];
?>
A continuación, pasaría a esta URL un parámetro que contiene el código javascript.
Si desea configurar esto, cree un archivo something.php
en su servidor web, ingrese el código anterior en él y luego acceda a http://your-server/something.php?message=<script>alert('XSS');</script>
en su navegador. Entonces debería mostrar una ventana emergente que contenga XSS.
En una página HTML estática, esto no es posible, ya que solo genera contenido basado en el código HTML estático del servidor. XSS necesita la inclusión del código provisto por el usuario. La exclusión es, si el HTML carga un código javascript vulnerable, que permite la entrada proporcionada por el usuario.
El punto principal de XSS es que un atacante desea incluir SU código en SU sitio web, sin piratear realmente el servidor web. Esto solo es posible con los lenguajes de programación del lado del servidor, que producen algo, el atacante previamente colocado en el servidor.
Básicamente, el pirata informático desea que el HTML se vea en el navegador de esta manera
<html><body>Foo<script>alert('XSS');</script></body></html>
en lugar de
<html><body>Foo</body></html>
Piense, por ejemplo, en un foro o comentarios sobre un artículo. El usuario debe poder dejar sus comentarios. El servidor necesita guardar esto y presentar el mismo comentario a otros usuarios. Si el comentario en sí contiene código javascript y el programa del servidor no lo mitiga, generará el mismo código como parte del bloque de comentarios.
En cuanto a cuándo se carga esto en el navegador, esto no es fácil de responder. Depende de dónde se incluye el código del pirata informático en el cuerpo de la página o los archivos javascript cargados posteriormente. Si se incluye como una etiqueta javascript en el HTML principal, se cargará una vez que se complete la carga del DOM.
Especialmente como se mencionó anteriormente, la vulnerabilidad XSS también podría ocurrir dentro de un archivo javascript (que toma la entrada del usuario, por ejemplo, una URL y la carga). En este caso, no es posible decir cuándo se ejecutará exactamente el código. Podría vincular este código javascript a un botón, a un evento onblur () del cuadro de texto o a un temporizador.
EDITAR:
Al elaborar el ataque de javascript, esto es lo que pondrías en tu archivo de servidor
<html><body>
<script type="text/javascript">
var queryDict = {};
location.search.substr(1).split("&").forEach(function(item) {queryDict[item.split("=")[0]] = item.split("=")[1]});
document.write(decodeURIComponent(queryDict["message"]));
</script>
</body></html>
Las dos primeras líneas, toman básicamente todos los parámetros GET y los dividen en una matriz (tomada de aquí ). La tercera línea simplemente envía esto a la página HTML. Por supuesto, esto también podría hacerse mediante cualquier otra manipulación de DOM desde el código ejecutado.