# Preocupação de Segurança/Privacidade: E-mail exposto na URL de redirecionamento do provedor DiscourseConnect

**URL:** <https://meta.discourse.org/t/security-privacy-concern-email-exposed-in-discourseconnect-provider-redirect-url/397980>\
**Category:** Feature\
**Tags:** pr-welcome\
**Created:** [9 Março , 2026 18:05 UTC](https://meta.discourse.org/t/security-privacy-concern-email-exposed-in-discourseconnect-provider-redirect-url/397980 "2026-03-09T18:05:25Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

**Author:** ![JACK\_ZHANG](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jack_zhang/32/492350_2.png) [@JACK\_ZHANG](https://meta.discourse.org/u/JACK_ZHANG)\
**Post date:** [9 Março , 2026 18:05 UTC](https://meta.discourse.org/t/security-privacy-concern-email-exposed-in-discourseconnect-provider-redirect-url/397980/1 "2026-03-09T18:05:25Z")

</div>

**Descreva o bug**

Ao usar o Discourse como um [Provedor DiscourseConnect (Provedor SSO)](https://meta.discourse.org/t/use-discourse-as-an-identity-provider-sso-discourseconnect/32974), o endereço de e-mail do usuário é exposto no URL de redirecionamento 302 para a parte confiável (relying party). Isso ocorre porque o método `populate_user_data` em `lib/second_factor/actions/discourse_connect_provider.rb` sempre define o e-mail:

```ruby
  def populate_user_data(sso)
    sso.name = current_user.name
    sso.username = current_user.username
    sso.email = current_user.email # <-- Sempre incluído
    sso.external_id = current_user.id.to_s
    # ...
  end

```

Este e-mail é então codificado em Base64 e incluído no URL de redirecionamento:  
`https://site-alvo.com/callback?sso=<payload_base64>&sig=<assinatura_hmac>`

A decodificação do payload base64 revela o endereço de e-mail em texto simples.

Impacto

1. Histórico do navegador: O e-mail é registrado no histórico do navegador
2. Logs do Nginx: O URL completo é registrado nos logs de acesso do nginx
3. Logs do site de destino: A parte confiável recebe o e-mail sem consentimento explícito do usuário
4. Expectativa do usuário: Os usuários geralmente autorizam para provar “Eu sou um usuário legítimo” - eles não esperam que seu e-mail seja compartilhado

Comportamento esperado

Os usuários devem ser capazes de controlar se seu e-mail é compartilhado com a parte confiável. Deve haver uma opção de configuração semelhante a `discourse_connect_overrides_groups`, `discourse_connect_overrides_avatar`, etc.

Atualmente, não há configuração de site para desativar esse comportamento. Escrever um plugin para substituir esse comportamento é possível, mas não ideal.

Etapas de reprodução

1. Habilitar `enable_discourse_connect_provider`
2. Configurar `discourse_connect_provider_secrets` (ex: \*.example.com|secret123)
3. Fazer um usuário autenticar via Provedor [DiscourseConnect](https://meta.discourse.org/t/13045?silent=true)
4. Verificar o URL de redirecionamento 302 - o e-mail é visível nos parâmetros do URL

O URL de redirecionamento se parece com:  
`https://parte-confiavel.com/sso?sso=bm9uY2U9xxx&sig=xxx`

A decodificação do parâmetro sso revela:  
`nonce=xxx&return_sso_url=xxx&email=user@example.com&external_id=123`

Ambiente

- Versão do Discourse: (mais recente)
- Auto-hospedado

Sugestões de correção possíveis

1. Adicionar uma configuração de site como `discourse_connect_provider_includes_email` (padrão: true para compatibilidade com versões anteriores) para controlar se o e-mail é incluído na resposta
2. Ou implementar o callback baseado em POST em vez de redirecionamento GET 302 para evitar o registro do URL

---

_[View the full topic](https://meta.discourse.org/t/security-privacy-concern-email-exposed-in-discourseconnect-provider-redirect-url/397980)._
