# Shadow DOM
Aprende hacking en AWS de cero a héroe con htARTE (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 `