Entendiendo/trabajando con CSP, iframes, ancestros

Tenemos Discourse instalado en site1. Somos propietarios/administradores de site2.tld y queremos acceder al foro a través de un iFrame desde una página allí. No soy experto en el arte de CSP-fu, así que se agradece la ayuda.

No quiero deshabilitar las restricciones de ancestros, pero temporalmente, desmarqué el CSP de ancestros de frame:

image

El HTML hasta ahora es:

<iframe
  style="position:absolute;width:100vw;height:100vh"
  src="https://forum.site1.tld">
</iframe>

Esto todavía resulta en

Firefox No Puede Abrir Esta Página

Para proteger tu seguridad, forum.site1.org no permitirá que Firefox muestre la página si otro sitio la ha incrustado. Para ver esta página, necesitas abrirla en una ventana nueva.

Miré en Incrustar pero esa función parece servir a un propósito diferente. No queremos limitar a un solo tema, y el usuario no iniciará sesión. Inicialmente está bien si el usuario no inicia sesión y todo el foro está disponible como solo lectura.

¿Sugerencias? ¿Preguntas?

¡Gracias!

¿Alguien más está incrustando su sitio1 Discourse en su sitio2? ¡Gracias!

No recomendamos, ni probamos, el uso de Discourse completamente incrustado en otro sitio a través de iframes.

En su lugar, recomendamos tener cada sitio en su propio dominio, utilizando enlaces, inicio de sesión único y estilizando Discourse para que coincida con la imagen visual de su sitio principal.

2 Me gusta

Entendido. ¡Gracias!

Entendiendo las consecuencias a largo plazo, hemos deshabilitado temporalmente CSP, pero todavía recibimos una advertencia de CSP de Firefox. ¿Se requiere un reinicio?

Aquí está la aplicación/desafío. Quizás haya una solución fácil…

Hay un servidor Discourse y, como de costumbre, cualquier número de cuentas de usuario e invitados. Los usuarios registrados tienen una aplicación que aloja un servidor web local. Se crea una página web en esta aplicación y se accede a ella desde un navegador local como http://192.168.1.1:8080. Esa página web ofrece el foro a través de un IFrame.

No tenemos control sobre las subredes que sirven el contenido, por lo que la IP puede ser de cualquier NAT/DHCP común. Pero tenemos control total sobre lo siguiente:

  • La instalación y el servidor de Discourse.
  • El contenido que se sirve.
  • El número de puerto es generalmente 8080, configurable por el usuario, pero nunca será 80 o 443.
  • Debido a que este es contenido local y no es crítico, no está asegurado con SSL.
  • Los usuarios deben tener una cuenta de Discourse y deben iniciar sesión en Discourse para tener acceso de escritura.

En cuanto a la seguridad:

  • El foro público es accesible por red a través de un nombre de host.
  • El acceso a la red es, por supuesto, siempre seguro con SSL.
  • Nadie puede crear contenido en el foro a menos que haya iniciado sesión.
  • Así que sí, la página local con el IFrame se sirve como HTTP, pero la fuente del IFrame es HTTPS://forum.site.tld. (Esta diferencia de protocolo podría ser la causa del fallo al acceder al foro incluso con CSP deshabilitado).
  • Una vez que el usuario inicia su navegador, para acceder al servidor local debe ingresar una contraseña. Podríamos habilitar SSL en esa página si fuera necesario para mantener la coherencia entre esa página principal y el IFrame al sitio del foro habilitado para SSL.
  • No tenemos ni tenemos la intención de programar a través del IFrame en Discourse. Todo lo que queremos hacer es alojar el foro en un contenedor.

Aquí hay algunas ideas aleatorias que podrían no tener ningún mérito:

  1. Permitir a los usuarios obtener una clave API de su página de cuenta de Discourse, que pueden poner en la aplicación, la cual luego se pasará a Discourse en una cookie o de alguna otra manera. Esto confirma que, si bien el usuario no cumple con CORS o CSP, tiene autorización para acceder a los recursos.
  2. Hacer que la aplicación inyecte un token en la URI del IFrame a Discourse. Simultáneamente, usar una llamada a la API para que Discourse permita conexiones entrantes con ese token. (Sí, eso necesitaría ser codificado).
  3. Siendo aún más vergonzoso… Crear una página en un sitio comunitario que abra un IFrame para el contenido de la subred, y otro IFrame para el foro. Este sitio puede ser autorizado para acceso cross-origin.
  4. Rendirse a tratar de eludir las políticas y usar target=window para abrir Discourse fuera de la ventana de la aplicación.

Sin recurrir inmediatamente a la opción 4… ¿alguna idea? ¡Gracias!