# Shadow DOM
Aprende hacking en AWS de cero a héroe conhtARTE (HackTricks AWS Red Team Expert)!
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF**, consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sigue** a **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
## Información Básica
Shadow DOM es parte del conjunto de características de [Web Components](https://developer.mozilla.org/en-US/docs/Web/Web\_Components), que tiene como objetivo permitir a los desarrolladores de JS crear elementos personalizados reutilizables con su funcionalidad encapsulada lejos del resto del código del sitio web.
Esencialmente, puedes usar Shadow DOM para **aislar el HTML y CSS de tu componente del resto de la página web**. Por ejemplo, si creas identificadores de elementos en un shadow DOM, estos **no entrarán en conflicto con los identificadores de elementos en el DOM padre**. Cualquier selector de CSS que utilices en tu shadow DOM solo se aplicará dentro del shadow DOM y no al DOM padre, y cualquier selector que utilices en el padre no penetrará dentro del shadow DOM.
```js
// creating a shadow DOM
let $element = document.createElement("div");
$shadowDomRef = $element.attachShadow({ mode: "open" }); // open or closed
```
Normalmente, cuando adjuntas un **"open" shadow DOM a un elemento**, puedes obtener una referencia al shadow DOM con **`$element.shadowRoot`**. Sin embargo, si el shadow DOM se adjunta en modo **"closed"**, **no puedes obtener una referencia** de esta manera. Incluso después de leer toda la documentación para desarrolladores que pude encontrar, todavía no tengo del todo claro el propósito del modo cerrado. [Según Google](https://developers.google.com/web/fundamentals/web-components/shadowdom):
> Hay otra variante de shadow DOM llamada modo "closed". Cuando creas un árbol shadow **closed**, **el JavaScript externo no podrá acceder al DOM interno de tu componente**. Esto es similar a cómo funcionan elementos nativos como `