Como definir o sinalizador seguro para o cookie _forum_session

Olá,

Nosso site deve funcionar com HTTP e HTTPS; precisamos proteger o cookie (_forum_session). O cookie está com a flag Secure ausente, possuindo apenas HttpOnly. Como configurar a flag Secure também?

Obrigado.

Você deve configurar seu site para funcionar apenas via HTTPS.

Não há como modificar no código do Discourse?

Olá @mevaha

A tendência na web, há muitos anos, é usar apenas HTTPS.

Isso costumava ser um problema até organizações como a Let’s Encrypt (LE) começarem a oferecer certificados SSL gratuitamente e fornecerem um mecanismo robusto para gerenciar esses certificados.

Quando a LE (certbot) é usada para configurar os certificados no seu site, ela configura tanto HTTP quanto HTTPS, e o tráfego HTTP será redirecionado automaticamente para HTTPS.

Claro, você pode encontrar uma maneira de executar o Discourse apenas em HTTP, mas isso não será suportado, exceto no desenvolvimento do Discourse; pois sem HTTPS, todas as informações de login dos usuários, incluindo senhas, seriam transmitidas sem criptografia pela rede. Isso NÃO é suportado em produção.

Pense nisso assim: HTTPS é como usar cinto de segurança no carro. Pessoas que querem dirigir sem cinto de segurança fazem isso por sua conta e risco; assim como os fabricantes de carros não vão produzir veículos sem cintos de segurança.

O mesmo vale para o Discourse. O Discourse foi projetado para funcionar com segurança em produção; portanto, a versão suportada do Discourse em produção é HTTPS.

Espero que isso ajude.

Desculpe não ser mais útil.

Obrigado, @neounix. Nosso problema é que o certificado HTTPS é gerenciado pelo balanceador de carga e apenas a porta 80 está aberta entre o Discourse e o balanceador. Tentamos redirecionar HTTP para HTTPS sem sucesso. Você poderia compartilhar comigo o arquivo de configuração de cookies do Discourse?

Obrigado.

Olá @mevaha

Se for esse o caso, é muito provável que você tenha um proxy reverso na frente do seu balanceador de carga (ou como parte dele).

Deixe-me explicar.

O proxy reverso (com balanceador de carga, se você tiver um) comunica-se com o Discourse no back-end usando HTTP.

Então você está correto ao dizer que o Discourse comunica apenas via HTTP, mas apenas com o proxy reverso, não com o mundo exterior.

Portanto, funciona assim:

USUÁRIOS WEB  <-----> HTTPS  <-----> PROXY REVERSO <----> HTTP <----> BALANCEADOR DE CARGA <----> DISCOURSE (DOCKER)

Daí, você pode expor seu contêiner Docker do DISCOURSE na Porta 80 (apenas HTTP), como você mencionou.

No entanto, no site voltado para a web, você precisa de um proxy reverso que encaminhe as solicitações HTTPS para o back-end usando HTTP.

Se configurado corretamente, seu proxy reverso (com balanceador de carga) garantirá que os cookies e cabeçalhos HTTP sejam passados corretamente de um lado para o outro.

Espero que isso ajude.

Se tiver mais dúvidas, por favor, pergunte.

Observe que, se você puder fornecer os detalhes técnicos exatos da sua arquitetura, será muito mais fácil ajudá-lo; afinal, não temos um aplicativo de bola de cristal funcionando para nós :slight_smile:

Muito obrigado @neounix