# DOM-Based Cross Site Scripting

El modelo de objetos de documento (DOM) es una interfaz de programación de aplicaciones multiplataforma e independiente del lenguaje que trata un documento HTML, XHTML o XML como una estructura de árbol. Los ataques basados ​​en DOM suelen ser ataques XSS reflejados que se activan mediante el envío de un enlace con entradas que se reflejan en el navegador web. En los ataques XSS basados ​​en DOM, la carga útil nunca se envía al servidor.

En un ataque XSS basado en DOM, el atacante envía una URL maliciosa a la víctima y, después de que la víctima hace clic en el enlace, el atacante puede cargar un sitio web malicioso o un sitio que tiene un controlador de ruta DOM vulnerable. Una vez que el navegador representa el sitio vulnerable, la carga útil ejecuta el ataque en el contexto del usuario en ese sitio.

Debido a su naturaleza, las vulnerabilidades XSS basadas en DOM se pueden ejecutar en muchos casos sin que el servidor pueda determinar qué se está ejecutando realmente. Esto puede hacer que muchas de las técnicas generales de detección y filtrado XSS sean impotentes ante este tipo de ataques.

Este ejemplo hipotético utiliza el siguiente código del lado del cliente:

```javascript
<script>
document.write("Site is at: " + document.location.href + ".");
</script>
```

Un atacante puede agregar `#<script>alert('xss')</script>`a la página afectada la URL que, cuando se ejecute, mostrará el cuadro de alerta. En este caso, el código adjunto no se enviaría al servidor ya que `#`el navegador no trata todo lo que sigue al carácter como parte de la consulta, sino como un fragmento.

### Cómo determinar si es vulnerable <a href="#how-to-determine-if-you-are-vulnerable" id="how-to-determine-if-you-are-vulnerable"></a>

Las fallas XSS pueden ser difíciles de identificar y eliminar de una aplicación web. La mejor manera de encontrar fallas es realizar una revisión de seguridad del código y buscar todos los lugares donde la entrada de una solicitud HTTP podría llegar a la salida HTML. Tenga en cuenta que se pueden utilizar una variedad de etiquetas HTML diferentes para transmitir un JavaScript malicioso. Nessus, Nikto y algunas otras herramientas disponibles pueden ayudar a escanear un sitio web en busca de estos defectos, pero sólo pueden arañar la superficie.

<mark style="color:red;">**Recursos**</mark>

{% embed url="https://portswigger.net/web-security/cross-site-scripting/dom-based" %}

{% embed url="https://cheatsheetseries.owasp.org/cheatsheets/DOM_based_XSS_Prevention_Cheat_Sheet.html" %}

{% embed url="https://www.acunetix.com/blog/articles/dom-xss-explained/" %}
