Entendendo/trabalhando com CSP, iframes, ancestors

Temos o Discourse instalado no site1. Possuímos/administramos o site2.tld e queremos acessar o fórum via iFrame de uma página lá. Não sou habilidoso na arte de CSP-fu, então a assistência é apreciada.

Não quero desabilitar as restrições de ancestralidade, mas temporariamente, desmarquei o CSP de ancestralidade de frame:

image

O HTML até agora é:

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

Isso ainda resulta em

O Firefox não consegue abrir esta página
Para proteger sua segurança, forum.site1.org não permitirá que o Firefox exiba a página se outro site a incorporou. Para ver esta página, você precisa abri-la em uma nova janela.

Olhei em Incorporar, mas esse recurso parece servir a um propósito diferente. Não queremos limitar a um único tópico, e o usuário não estará logado. Inicialmente, tudo bem se o usuário não fizer login e todo o fórum estiver disponível como somente leitura.

Sugestões? Perguntas?

Obrigado!

Alguém mais está incorporando seu site1 Discourse em seu site2? Obrigado!

Não recomendamos, nem testamos, o uso do Discourse totalmente incorporado em outro site via iframes.

Em vez disso, recomendamos que cada site esteja em seu próprio domínio, usando links, login único e estilizando o Discourse para corresponder ao visual do seu site principal.

2 curtidas

Entendido. Obrigado!

Compreendendo as consequências a longo prazo, desativamos temporariamente o CSP, mas ainda recebemos um aviso de CSP do Firefox. É necessário reiniciar?

Aqui está a aplicação/desafio. Talvez haja uma solução fácil…

Existe um servidor Discourse e, como de costume, qualquer número de contas de usuário e convidados. Usuários registrados têm um aplicativo que hospeda um servidor web local. Uma página web é criada neste aplicativo e acessada a partir de um navegador local como http://192.168.1.1:8080. Essa página web oferece o fórum via IFrame.

Não temos controle sobre as sub-redes que servem o conteúdo, então o IP pode ser de qualquer NAT/DHCP comum. Mas temos controle total sobre o seguinte:

  • A instalação e o servidor Discourse.
  • O conteúdo que é servido.
  • A porta geralmente é 8080, configurável pelo usuário, mas nunca será 80 ou 443.
  • Como este é conteúdo local e não é crítico, não é protegido por SSL.
  • Os usuários devem ter uma conta Discourse e devem fazer login no Discourse para acesso de escrita.

Quanto à segurança:

  • O fórum público é acessível pela rede via nome de host.
  • O acesso à rede é, claro, sempre protegido por SSL.
  • Ninguém pode criar conteúdo no fórum a menos que esteja logado.
  • Então, sim, a página local com o IFrame é servida como HTTP, mas a origem do IFrame é HTTPS://forum.site.tld. (Essa diferença de protocolo pode ser o que está causando a falha no acesso ao fórum, mesmo com o CSP desativado.)
  • Assim que o usuário iniciar seu navegador, para acessar o servidor local, ele precisará inserir uma senha. Poderíamos habilitar SSL nessa página, se necessário, para manter a consistência entre essa página ancestral e o IFrame para o site do fórum habilitado para SSL.
  • Não temos ou temos a intenção de usar scripts através do IFrame para o Discourse. Tudo o que queremos fazer é hospedar o fórum em um contêiner.

Aqui estão algumas ideias aleatórias que podem não ter mérito:

  1. Permitir que os usuários obtenham uma chave de API de sua página de conta Discourse, que eles podem colocar no aplicativo, que então será passada para o Discourse em um cookie ou de alguma outra forma. Isso confirma que, embora o usuário não seja compatível com CORS ou CSP, ele tem autorização para acessar os recursos.
  2. Fazer com que o aplicativo injete um token no URI do IFrame para o Discourse. Simultaneamente, usar uma chamada de API para fazer com que o Discourse permita conexões de entrada com esse token. (Sim, isso precisaria ser codificado)
  3. Ficando ainda mais estranho… Criar uma página em um site comunitário que abra um IFrame para o conteúdo da sub-rede e outro IFrame para o fórum. Este único site pode ser autorizado para acesso cross-origin.
  4. Desistir de tentar contornar as políticas e usar target=window para abrir o Discourse fora da janela do aplicativo.

Sem recorrer imediatamente à opção 4… alguma ideia? Obrigado!