Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

153
Vistas
SharedArrayBuffer en un Iframe

Por lo tanto, SharedArrayBuffer se limitó recientemente a páginas aisladas de origen cruzado como solución de seguridad.

Tenemos una herramienta que depende de SharedArrayBuffer, la modifiqué para que volviera a funcionar moviéndola a una página básica despojada de todas las demás UI del sitio y demás, y enviando los siguientes encabezados:

 Cross-Origin-Embedder-Policy: require-corp Cross-Origin-Opener-Policy: same-origin

Intentar cargarlo en un iframe del sitio completo me da los errores de la consola. SharedArrayBuffer will require cross-origin isolation as of M92 seguido de ReferenceError: SharedArrayBuffer is not defined , lo mismo que estaba obteniendo antes de cruzar el origen y aislar la herramienta en la página mínima en sí.

La página en la que estoy tratando de incluir el iframe no está aislada de origen cruzado. Sería muy difícil, si no imposible, hacerlo. No necesito hablar con el iframe desde la página principal, es solo una cuestión de conveniencia/estilo. La solución actual en producción en este momento es solo vincular a los usuarios a la página de herramientas de origen cruzado mínimo en una nueva ventana, pero eso es bastante incómodo.

Lo que espero es que haya alguna combinación de atributos de iframe sandbox o algo que haga que esto funcione. Luché con esto durante un par de horas.

Esto puede no ser factible por lo que sé.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

No estoy seguro de si esta opción es una solución en su caso, pero tal vez pueda ayudarlo a encontrar una solución completa. Esta publicación de blog describe cómo habilitar SharedArrayBuffer mediante la modificación del encabezado en ServiceWorker. Funciona en el siguiente orden:

  1. Cuando la página se carga por primera vez, se registra un trabajador del servicio
  2. Se recarga la pagina
  3. SharedArrayBuffer está disponible porque ServiceWorker controla todos los encabezados CORS para todas las solicitudes

Service Worker modifica todas las solicitudes agregando encabezados CORS/COEP (el ejemplo se toma de la publicación de blog mencionada):

 self.addEventListener("install", function() { self.skipWaiting(); }); self.addEventListener("activate", (event) => { event.waitUntil(self.clients.claim()); }); self.addEventListener("fetch", function(event) { if (event.request.cache === "only-if-cached" && event.request.mode !== "same-origin") { return; } event.respondWith( fetch(event.request) .then(function(response) { // It seems like we only need to set the headers for index.html // If you want to be on the safe side, comment this out // if (!response.url.includes("index.html")) return response; const newHeaders = new Headers(response.headers); newHeaders.set("Cross-Origin-Embedder-Policy", "require-corp"); newHeaders.set("Cross-Origin-Opener-Policy", "same-origin"); const moddedResponse = new Response(response.body, { status: response.status, statusText: response.statusText, headers: newHeaders, }); return moddedResponse; }) .catch(function(e) { console.error(e); }) ); });

over 4 years ago · Santiago Trujillo Denunciar

0

Intente agregar allow-scripts y tokens allow-same-origin en el atributo sandbox del iframe:

 <iframe src="…" sandbox="allow-scripts allow-same-origin"></iframe> ^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^

Aquí hay algunos recursos relevantes sobre el tema:

  • Sandboxing, IFrame y permitir el mismo origen (pregunta de StackOverflow)
  • Asegurar un iframe gracias al atributo sandbox
  • <iframe> : el elemento Inline Frame (documentos de MDN), no se pierda la nota sobre seguridad en la descripción del atributo.

Pruebe lo anterior primero, y si no ayudó con el problema de SharedArrayBuffer que tiene, entonces las cosas son un poco más complejas.

El origen cruzado adecuado requiere encabezados explícitos de los subrecursos (el <iframe> tiene que enviar encabezados), lo cual es un gran problema cuando los subrecursos son de terceros y están fuera de control. Para mitigar este problema, existe una propuesta Cross-Origin-Embedder-Policy: credentialles .

Sin embargo, hay un problema: no cambia la forma en que funciona <iframe> (¡qué lástima, esto es exactamente lo que se necesita!). Hay una discusión sobre iframes anónimos , que resolvería este problema, pero aún no está resuelto, por lo que no aguantaría la respiración aquí.

Entonces, la única opción que queda es retrasar este cambio en el comportamiento de Chrome (que se puede hacer antes de Chrome 103):

  1. Solicita un token para tu origen.
  2. Agregue el token a sus páginas. Hay dos maneras de hacerlo:
    • Agregue una etiqueta <meta> al encabezado de cada página. Por ejemplo, esto puede parecerse a: <meta http-equiv="origin-trial" content="TOKEN_GOES_HERE">
    • Si puede configurar su servidor, también puede agregar el token mediante un encabezado HTTP Origin-Trial . El encabezado de respuesta resultante debería ser similar a: Origin-Trial: TOKEN_GOES_HERE
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda