Blog de ClockTools

Herramientas para desarrolladores

¿Qué es un iframe aislado?

Una guía de las capacidades del aislamiento de iframes, los orígenes opacos, las interacciones entre tokens y el diseño de vistas previas HTML más seguras.

Por , desarrollador y editor | | Revisado conforme a la política editorial de ClockTools

Ilustración destacada de un iframe aislado para ClockTools
Tabla de contenidos

Un iframe aislado es un documento incrustado en el navegador al que su atributo sandbox aplica restricciones adicionales. Con un valor sandbox vacío, el navegador parte de un estado restrictivo; los tokens allow-* devuelven solo las capacidades que necesita el contenido incrustado. Para una vista previa HTML, el diseño útil más seguro no consiste en «confiar en el código», sino en «dar a la vista previa un límite separado, añadir los permisos mínimos y mantener los secretos fuera del experimento».

¿Qué cambia cuando un iframe está en un espacio aislado?

Un iframe normal crea un contexto de navegación anidado. La política del mismo origen, la política de permisos, la política de seguridad de contenido y los propios encabezados del sitio enmarcado siguen siendo importantes, pero el marco no queda automáticamente despojado de todas las capacidades del navegador.

Añadir sandbox pide al navegador que imponga restricciones adicionales. El Estándar HTML de WHATWG define el atributo como un conjunto de tokens sin orden, separados por espacios. Si falta un token, su restricción sigue activa; añadirlo levanta una restricción concreta.

Esa dirección es fácil de malinterpretar:

<iframe sandbox srcdoc="<p>Static preview</p>"></iframe>

Esta es la forma restrictiva. No significa "no se seleccionaron opciones de zona de pruebas". Significa que el sandbox está activo y ninguna de sus capacidades opcionales ha sido restaurada.

<iframe
  sandbox="allow-scripts allow-forms"
  srcdoc="<button type='button'>Run</button>">
</iframe>

Esta versión permite scripts y comportamiento de formularios, pero deja otras restricciones. El resultado exacto de la seguridad aún depende de dónde proviene el contenido y qué expone la aplicación circundante.

¿Qué restricciones se aplican por defecto?

El estándar completo contiene más detalles que una lista de verificación, pero estas categorías explican la mayor parte del comportamiento de vista previa.

Área restringidaQué impide el estado restrictivo inicialPor qué importa para una vista previa
Ejecución de scriptJavaScript no se ejecutaLas vistas previas estáticas de HTML/CSS pueden no necesitarla
Envío de formularioNo se pueden enviar formulariosLos ejemplos interactivos pueden necesitar validación sin un envío real
Ventanas emergentes y nuevos contextosLas nuevas ventanas y pestañas están restringidasEvita que un ejemplo genere páginas libremente
Navegación de nivel superiorEl marco no puede reemplazar libremente la página de alojamientoImpide que una vista previa cambie la página del editor
Tratamiento de origenAl contenido se le puede asignar un origen opaco únicoSepara el almacenamiento y el acceso del mismo origen del host
DescargasSe bloquean las descargas sin el permiso pertinenteImpide que un ejemplo inicie descargas de forma predeterminada
Diálogos modalesSe bloquean alert, confirm y promptAlgunos ejemplos de enseñanza utilizan diálogos, pero interrumpen al usuario.

El referencia de iframe de MDN enumera los tokens actuales y explica lo que restaura cada uno. Verifique esa referencia en lugar de copiar una lista de tokens antigua en un control de seguridad de larga duración.

¿Qué restauran los tokens de permiso comunes?

Considere cada token como una decisión sobre capacidades, no como un interruptor de comodidad.

TokenCapacidad restauradaPregunta para hacer antes de agregarlo
allow-scriptsEjecución de JavaScript¿Esta vista previa realmente necesita comportamiento?
allow-formsEnvío de formulario¿Puede el ejemplo enviar datos a un destino externo?
allow-modalsalert, confirmy prompt¿Puede un diálogo atrapar o interrumpir repetidamente al usuario?
allow-popupsCreación de contextos de navegación emergentes.¿Es una nueva ventana parte del ejercicio previsto?
allow-downloadsInicio de descargas¿El código de usuario debería crear archivos locales?
allow-same-originRetención del origen normal del recurso.¿Podría ese origen compartir privilegios o almacenamiento con la página anfitriona?
allow-top-navigation-by-user-activationNavegación de nivel superior iniciada por el usuario¿Dejar el editor es una acción explícita del usuario?

Algunos tokens interactúan. Revisarlos uno a uno es necesario, pero no suficiente. El origen del documento incrustado, si es srcdoc o una URL remota, la política de seguridad de contenido de la página anfitriona y cualquier canal de mensajes entre el iframe y su padre influyen en el aislamiento.

Diagrama de capacidades de un iframe aislado: se habilitan selectivamente scripts, formularios y diálogos, y se restringe el acceso al mismo origen
Diagrama de capacidades de un iframe aislado: se habilitan selectivamente scripts, formularios y diálogos, y se restringe el acceso al mismo origen

El diagrama describe un límite de permiso. No afirma que ningún conjunto de tokens haga que el código arbitrario sea inofensivo.

¿Por qué es importante un origen opaco?

Sin allow-same-origin, el contenido aislado se trata como procedente de un origen especial que no supera las comprobaciones normales de mismo origen. Los desarrolladores suelen llamarlo origen opaco o único.

En una vista previa inline con srcdoc, esa separación es útil. Permite renderizar el documento sin considerarlo parte del mismo origen de aplicación que el editor. No puede acceder directamente al DOM del padre ni leer su almacenamiento como si fuera otro componente de la página anfitriona.

Origen opaco no significa "fuera de línea" o "red deshabilitada". Si se permiten scripts, el código de vista previa aún puede realizar solicitudes de red que las políticas del navegador y el destino permitan. Puede utilizar CPU y memoria, manipular su propio DOM y comunicarse a través de canales que el host expone deliberadamente. La frontera reduce la autoridad; no certifica el código.

MDN advierte especialmente sobre combinar allow-scripts y allow-same-origin cuando el contenido incrustado tiene el mismo origen y puede quitar su propio atributo sandbox. La lección depende del contexto: no restaure ambas capacidades solo porque un ejemplo falle sin ellas.

¿Cómo configura su aislamiento la vista previa de ClockTools?

El editor HTML en tiempo real de ClockTools construye la vista previa con srcdoc. Si JavaScript está habilitado, el valor de sandbox del iframe es:

allow-scripts allow-forms allow-modals

La implementación omite deliberadamente allow-same-origin, allow-popups, los permisos de navegación principal y el de descarga. La interfaz identifica la vista previa como un entorno aislado opaco, haciendo visible la decisión sobre el origen en lugar de ocultarla en el código.

Esa configuración permite ejemplos didácticos habituales: los scripts actualizan la vista previa, los formularios prueban la validación y el envío del navegador, y pueden ejecutarse ejemplos con diálogos. No convierte código desconocido en código fiable. Por eso, las indicaciones del editor piden evitar secretos y revisar los scripts desconocidos.

La página también captura mensajes de la consola y expone un panel de verificación de documentos. Esas son características de observabilidad, no permisos de zona de pruebas. Un panel de consola ayuda a explicar una falla; no impide una solicitud. Una verificación estructural puede señalar la falta de una etiqueta; no lleva a cabo una revisión de seguridad completa.

¿Qué mostró una verificación de capacidad?

Inspeccioné el elemento de vista previa renderizado en el espacio de trabajo ClockTools en vivo en lugar de depender únicamente del texto de marketing.

ComprobaciónEstado observado en la herramientaSignificado
Fuente de vista previasrcdoc documento presenteEl HTML actual está incrustado directamente en el marco.
Atributo sandboxallow-scripts allow-forms allow-modalsSe restablecen tres capacidades
Token del mismo origenAusenteLa vista previa conserva un origen opaco.
Etiqueta de interfaz«entorno aislado opaco»El límite se revela al usuario.
Paneles de soporteConsola y Comprobaciones visiblesSe dispone de información sobre la ejecución y el documento

El título del iframe era «Live HTML preview», que también proporciona a las tecnologías de asistencia una etiqueta de propósito para el documento incrustado.

Esta inspección confirma el límite configurado en ese momento. No prueba que todos los scripts posibles sean seguros y no reemplaza una revisión del puente de mensajes, el manejo de recursos externos, la Política de seguridad de contenido o futuros cambios de código.

¿Qué combinaciones de tokens merecen especial atención?

Utilice una revisión basada en amenazas en lugar de una receta de token universal.

allow-scripts más allow-same-origin

Este par puede debilitar seriamente el aislamiento cuando el documento incrustado tiene el mismo origen y puede afectar sus condiciones de incrustación. Si se requieren ambos, proporcione contenido que no sea de confianza desde un origen deliberadamente separado y analice las rutas de escape en lugar de tratar el atributo como el único límite.

Formularios más acceso a la red

allow-forms restaura el envío, pero los scripts y los elementos HTML ordinarios también pueden enviar solicitudes de otras maneras. Nunca coloque credenciales, datos privados de clientes o tokens de portador en una vista previa que no sea de confianza y asuma que el sandbox los contendrá.

Ventanas emergentes y salida del aislamiento

allow-popups permite que un iframe abra otro contexto de navegación. allow-popups-to-escape-sandbox permite que ese contexto no herede las restricciones del aislamiento. Puede ser útil para un anuncio o enlace externo deliberadamente aislado, pero amplía lo que debe revisarse.

Navegación de la página principal

Los permisos de navegación principal permiten que el iframe sustituya la página anfitriona en condiciones determinadas. Un entorno de pruebas de código rara vez lo necesita. Si la navegación forma parte de la lección, considere interceptar y mostrar el destino, en lugar de dar a la vista previa el control de la página principal.

¿Qué no puede proteger un entorno aislado?

El aislamiento es un mecanismo del navegador, no una plataforma completa para ejecutar código hostil.

  • No impide que un usuario abra el mismo contenido directamente fuera del marco.
  • No garantiza que los scripts permitidos sean rápidos, educados o estén libres de bucles infinitos.
  • No bloquea automáticamente todas las solicitudes de red.
  • No sanea HTML ni demuestra que una URL sea segura.
  • No protege los secretos que ya se encuentran dentro de la vista previa.
  • No reemplaza la validación del lado del servidor para formularios reales.
  • No valida la accesibilidad, la semántica ni el comportamiento entre navegadores.
  • No protege otro servicio que acepte una solicitud de la vista previa.

Los límites también cambian con el tiempo a medida que evolucionan los navegadores y los estándares. El comportamiento de las funciones debe probarse en los navegadores que la audiencia realmente utiliza, y la lista de tokens debe revisarse con respecto a las especificaciones actuales.

¿Cómo debería diseñar una vista previa de código en el navegador?

Empiece con el atributo sandbox vacío y añada una capacidad cada vez. Para cada una, cree una pequeña prueba de aceptación y otra de uso indebido.

Tarea del lectorPunto de partida mínimoPrueba antes del lanzamiento
Renderizar HTML y CSS estáticosEntorno aislado sin permisos adicionalesLos scripts, formularios, ventanas emergentes y la navegación superior permanecen bloqueados
Enseñar programación del DOMAñadir allow-scriptsEl script se ejecuta; el DOM y el almacenamiento de la página anfitriona siguen aislados
Demostrar la validación nativa de formulariosConsidere allow-forms solo si hace falta enviar el formularioLos destinos inesperados no pueden recibir datos sensibles
Mostrar diálogosAñada allow-modals temporalmenteLos diálogos repetidos no pueden inutilizar la página anfitriona
Cargar proyectos controlados por el usuarioOrigen separado más controles en capasSandbox, CSP, mensajería, recursos y límites se revisan juntos

Mantenga estrecho el protocolo de mensajes del marco principal. Valide el remitente, la forma del mensaje y los comandos permitidos. No acepte código arbitrario o instrucciones de navegación a través de un mensaje genérico de "ejecución" a menos que sea el producto explícitamente aislado que desea crear.

Ofrezca un modo sin JavaScript para la inspección estática. Añada controles para detener, reiniciar o recargar ejemplos descontrolados. Muestre los errores de consola sin copiar datos sensibles del documento padre al iframe. Trate las hojas de estilo y los scripts externos como dependencias de red cuyos servidores y contenidos futuros escapan al control del editor.

Para un experimento enfocado, el editor HTML en tiempo real ofrece anchos adaptables, captura de consola, comprobaciones y un entorno aislado opaco. Para trabajos de lanzamiento con paquetes, servidores, credenciales, pruebas o despliegue, lleve el código a un repositorio local y utilice un proceso más completo de desarrollo y revisión de seguridad.

Preguntas frecuentes

¿Qué hace el atributo sandbox de un iframe?

Aplica restricciones adicionales al documento enmarcado. Un valor de espacio aislado vacío comienza desde la línea base restrictiva, mientras que los tokens de permiso separados por espacios restauran capacidades seleccionadas, como scripts o formularios.

¿El espacio aislado significa que el iframe es completamente seguro?

No. El aislamiento reduce los privilegios, pero no garantiza que el código sea fiable, ni bloquea todas las solicitudes de red, evita el agotamiento de recursos, sanea HTML o protege los secretos incluidos en la vista previa.

¿Qué es un origen opaco en un iframe de espacio aislado?

Si falta allow-same-origin, el documento incrustado se trata como perteneciente a un origen especial que no supera las comprobaciones habituales de mismo origen. Esto impide que actúe como parte del mismo origen de aplicación que el documento padre.

¿Por qué es arriesgado combinar allow-scripts con allow-same-origin?

Para contenido del mismo origen, restaurar ambas capacidades puede socavar el aislamiento que la zona de pruebas debía proporcionar, incluidos escenarios en los que el código enmarcado puede eliminar la zona de pruebas. Utilice un origen separado y una revisión completa de amenazas cuando ambos sean necesarios.

¿Puede un iframe en espacio aislado realizar solicitudes de red?

Potencialmente, sí. El sandboxing no actúa como un firewall de red universal. Los scripts permitidos y los recursos HTML aún pueden realizar solicitudes que la política del navegador y el destino permitan.

¿Un entorno de pruebas HTML debería permitir JavaScript?

Solo si lo requiere la tarea del lector. Un visor estático de HTML/CSS puede mantener bloqueados los scripts. Un entorno interactivo puede añadir allow-scripts, conservar un origen opaco y combinar controles de recursos, mensajería, reinicio y gestión de secretos.

Acerca del autor

Vigneshwaran Vijayakumar

Fundador, desarrollador y editor de ClockTools | Gerente de Marketing Digital | India

Vigneshwaran es un ingeniero con décadas de experiencia técnica, incluida su labor profesional como director de marketing digital en Dubái. Su trabajo conecta el análisis de datos, la optimización para motores de búsqueda, la optimización de la tasa de conversión, los sistemas de contenido, la producción visual y la inteligencia artificial y el aprendizaje automático aplicados. En ClockTools, convierte esa experiencia multidisciplinar en herramientas de navegador especializadas y guías prácticas respaldadas por fuentes.

Perfil de LinkedIn