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:
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.
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.
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:
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.
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)
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.
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!