| Resumo | fornece dois formulários de postagem independentes e anônimos | |
| Link do Repositório | GitHub - elRicharde/discourse-anonymous-feedback: Anonymous Feedback Formular in Discourse · GitHub | |
| Guia de Instalação | Como instalar plugins no Discourse |
Este plugin do Discourse oferece dois formulários de postagem independentes e anônimos: “Feedback Anônimo” e “Quadro Branco”. Ambos os formulários são protegidos por um “código de porta” (uma senha simples) e permitem que usuários sem conta enviem uma mensagem privada para um grupo de usuários pré-configurado, mesmo que seu fórum exija login normalmente; esses dois formulários não exigem.
Tecnicamente, as postagens são enviadas por meio de uma página da web sem necessidade de login e podem até ser usadas em uma aba de navegação anônima. Não há possibilidade de rastrear o remetente, pois os endereços IP não são registrados. Este plugin foi projetado para oferecer um canal seguro e confidencial para comunicação.
Por que usar este plugin?
Em muitas comunidades, tópicos sensíveis ou ideias exigem um canal de feedback que garanta anonimato e reduza a pressão social. Este plugin aborda vários desafios-chave:
-
Fomentar Feedback Sem Inibições: Oferece um espaço seguro para usuários (e até mesmo não usuários, se o código de porta for compartilhado externamente) compartilharem opiniões honestas e sem filtros, preocupações ou ideias inovadoras, sem medo de julgamento ou represálias. Isso pode levar a contribuições mais francas e valiosas que, de outra forma, seriam omitidas.
-
Confidencialidade e Confiança: Ao garantir o anonimato por meio de medidas técnicas (como limitação de taxa baseada em HMAC sem registro de IP), o plugin gera confiança e encoraja uma participação mais ampla, especialmente para assuntos delicados.
-
Preencher Lacunas de Comunicação: Cria uma ponte de comunicação acessível para indivíduos que hesitam em postar publicamente ou que não possuem uma conta no Discourse, ampliando assim o alcance do engajamento da comunidade.
-
Entrada Estruturada: Ao direcionar o feedback para um grupo privado específico, garante que informações sensíveis sejam revisadas pelos membros da equipe adequados, permitindo discussão focada e ação fora da vista pública.
-
Simplicidade para Não Usuários: O mecanismo de código de porta permite que partes externas ou visitantes temporários forneçam contribuições sem a sobrecarga do registro completo de conta.
Em última análise, este plugin aprimora a interação da comunidade, permitindo um ambiente mais inclusivo e seguro para discussões e sugestões críticas.
Como Funciona (Visão Técnica)
O plugin foi desenvolvido com foco no anonimato e na segurança.
-
Acesso: Um usuário navega até
/anonymous-feedbackou/white-board. -
Desbloqueio: O usuário deve inserir o código de porta correto. O servidor valida esse código.
-
Para evitar ataques de força bruta, o servidor utiliza um sistema de limitação de taxa baseado em um hash HMAC do endereço IP do usuário e de um segredo rotativo. O endereço IP em si nunca é armazenado.
-
Se o código estiver correto, o servidor define uma flag temporária e de uso único na sessão do usuário.
-
-
Envio: O usuário escreve e envia sua mensagem.
-
Criar MP: O servidor verifica a flag da sessão. Se válida, cria uma nova mensagem privada para o grupo de destino configurado e a publica como o usuário bot configurado (ou usuário do sistema). A flag da sessão é então imediatamente excluída, de modo que o usuário precisa inserir o código de porta novamente para qualquer mensagem adicional.
Casos de Uso / Fluxos de Trabalho
Este plugin foi projetado para ser flexível. Aqui estão dois fluxos de trabalho comuns que você pode implementar:
Caso de Uso 1: O “Quadro Branco” - Um Mural de Avisos Público Moderado
Este caso de uso é para criar visibilidade para tópicos sensíveis ou comportamentos inadequados observados na comunidade (por exemplo, em eventos ou em interações gerais). Por exemplo, tornar visíveis questões como sexismo.
O Objetivo: Tornar questões importantes visíveis para a comunidade sem expor a identidade da pessoa que as relatou. O foco está na mensagem, não no remetente, e possivelmente nem mesmo nos indivíduos envolvidos. Uma representação simples de situações com comportamento inadequado, sem citar nomes, ainda cria visibilidade e aumenta a conscientização.
O Fluxo de Trabalho:
-
Submissão: Um usuário envia uma postagem por meio do formulário
/white-board. Isso pode ser acessado por membros (MG), aprendizes (ANW) e facilitadores (FM). Apenas o usuário “Anonymous” pode criar postagens. -
Revisão Privada: A postagem chega como uma Mensagem Privada ao
target_groupconfigurado (por exemplo, uma equipe de moderação ou um comitê de “Confiança e Segurança”). Será identificável como uma entrada do “Quadro Branco”. -
Análise: A equipe revisa a submissão contra critérios pré-definidos (por exemplo, sem ataques pessoais, sem insultos, adesão às diretrizes da comunidade).
-
Publicação (Se Aprovada): Um administrador é convidado para a mensagem, que a converte em um tópico público em uma categoria pública dedicada chamada “Quadro Branco”. Este tópico é publicado usando uma conta genérica específica (por exemplo, um usuário “WhiteBoardBot” ou “Anonymous”, configurado via a configuração
bot_username). As credenciais de login deste usuário podem ser compartilhadas com o grupo revisor. A publicação é feita pelo usuário “Anonymous”. -
Controle de Discussão: As permissões da categoria “Quadro Branco” são definidas de modo que sejam visíveis para membros/aprendizes/facilitadores, mas não comentáveis. Espera-se que os moderadores normais do fórum não moderem esta área específica; isso é responsabilidade exclusiva do
target_groupdesignado. Ainda resta a questão de saber se o Quadro Branco deve conter subcategorias (por exemplo, “anônimo fechado” ou categorias específicas para postagens dotarget_group). -
Tratamento de Rejeições: Como não há como entrar em contato com o remetente anônimo, é uma boa prática ter um tópico fixado na categoria “Quadro Branco” explicando os critérios de publicação e as razões pelas quais uma submissão pode ser rejeitada. Regras que justificam a não publicação devem sempre ser tornadas públicas em um único local no fórum.
Caso de Uso 2: Feedback Anônimo - Um Canal Direto e Privado
Este caso de uso é para fornecer uma linha de comunicação direta e confidencial a uma equipe específica para qualquer tipo de feedback (por exemplo, feedback de votação ou outras sugestões anônimas).
O Objetivo: Oferecer aos membros e não membros uma maneira segura de fornecer feedback sobre assuntos da comunidade, votações ou outros tópicos diretamente para a liderança ou um comitê relevante.
O Fluxo de Trabalho:
-
Submissão: Um usuário envia feedback por meio do formulário
/anonymous-feedback. A linha de assunto pode ajudar a categorizar a mensagem. Esta postagem chega com o prefixo de assunto “Mensagem Anônima - dd.mm.aaaa, hh:mm:ss” para a caixa de entrada coletiva dotarget_group. -
Entrega Privada: A mensagem chega como uma Mensagem Privada ao
target_group. É identificável como “Feedback Anônimo” pelo prefixo do assunto. Otarget_groupentão decide o que fazer com a mensagem. -
Tratamento Interno: A equipe pode então discutir o feedback em privado, envolver outras partes relevantes se necessário ou decidir sobre uma ação. Este feedback pode ser usado para feedback de votação ou outras sugestões anônimas.
-
Melhor Prática para Feedback Inadequado: Se uma submissão for inadequada, a equipe pode simplesmente excluí-la. Você pode considerar publicar um aviso genérico e público (por exemplo, em uma categoria “Notícias”) declarando que “Feedback recebido em [Data] não foi processado porque violou nossos padrões da comunidade para comunicação respeitosa.” Isso informa o remetente sem revelar detalhes e o encoraja a reenviar de maneira mais construtiva. Se for uma postagem para o Quadro Branco (identificável por não ter marcação especial, ou possivelmente um sufixo se útil): os moderadores são convidados para a mensagem, mas ninguém responde à mensagem. Os moderadores convertem a mensagem em um tópico na categoria “Quadro Branco” → visível para membros/aprendizes/facilitadores e não comentável.
Recursos
-
Dois Endpoints Independentes: Fornece
/anonymous-feedbacke/white-board, cada um com sua própria configuração separada. -
Proteção por Código de Porta: Cada formulário é protegido por seu próprio código de porta secreto para evitar spam. O código de porta é o mesmo para todos, e a página também pode ser usada em modo privado ou no computador dos pais.
-
Grupo de Destino Configurável: Mensagens de cada formulário são enviadas como uma mensagem privada para um grupo de usuários específico e configurável.
-
Sessão de Uso Único: Após o envio bem-sucedido de uma mensagem, o usuário é redirecionado de volta para a tela do código de porta. Eles devem inserir o código novamente para enviar outra mensagem, o que evita spam simples de múltiplas postagens. Após o envio, você retorna ao código de porta; múltiplas postagens não são facilmente possíveis.
-
Limitação de Taxa que Preserva o Anonimato: Protege contra ataques de força bruta e spam sem registrar endereços IP.
-
Proteção contra Bots: Contém um campo honeypot oculto para capturar bots simples.
-
Usuário Remetente Personalizável: Você pode definir um usuário bot para cada formulário para que as mensagens privadas pareçam ser enviadas por este usuário (por exemplo, “FeedbackBot”). O usuário deve existir. Se vazio, o usuário do sistema é usado por padrão.
-
Interface de Usuário Limpa e Moderna: Os formulários são baseados em um componente reutilizável Ember.js para uma experiência de usuário consistente e limpa.
Instalação
Siga o guia padrão para instalar plugins do Discourse: Instalar um Plugin.
-
Adicione a URL do repositório do plugin ao seu arquivo
app.yml:hooks: after_code: - exec: cd: $home/plugins cmd: - git clone https://github.com/elRicharde/discourse-anonymous-feedback -
Reconstrua seu contêiner:
cd /var/discourse && ./launcher rebuild app
Configuração
Após a instalação, você pode configurar o plugin nas configurações de administração do Discourse. Pesquise por “anonymous feedback”. Todas as configurações são independentes para os formulários “Feedback Anônimo” e “Quadro Branco”.
| Configuração | Descrição |
|---|---|
anonymous_feedback_enabled |
Ativa ou desativa a página /anonymous-feedback. |
white_board_enabled |
Ativa ou desativa a página /white-board. |
... door_code |
A senha secreta que os usuários devem inserir para acessar o formulário de mensagem. |
... target_group |
O nome do grupo de usuários que receberá as mensagens privadas. Este grupo deve existir. |
... rate_limit_per_hour |
Um limite global de quantas mensagens podem ser enviadas por hora para evitar abusos. Defina como 0 para desativar. |
... max_message_length |
O número máximo de caracteres permitidos no texto da mensagem. |
... hmac_rotation_hours |
Com que frequência a chave secreta para limitação de taxa é rotacionada. Uma duração menor redefine as travas de força bruta mais rapidamente, mas é ligeiramente menos segura. |
... bot_username |
Opcional. O nome de usuário do usuário que enviará a MP. O usuário deve existir. Se vazio, o usuário do sistema é usado. |
Desenvolvimento / Arquitetura
-
Backend: Um único controlador Ruby on Rails,
AnonymousFeedbackController, processa todas as solicitações para ambos os endpoints. Ele usa um métodokindque verifica o caminho da solicitação (/anonymous-feedbackvs./white-board) para determinar quais configurações usar. Isso evita duplicação de código. Um helper dinâmicosettingsimplifica ainda mais a leitura da configuração. -
Frontend: A interface do usuário é baseada em um único componente reutilizável Ember.js,
<AnonymousFeedbackForm />.-
Este componente contém todo o HTML, CSS e lógica Javascript para o estado do formulário (desbloqueio, envio, tratamento de erros).
-
Os modelos de rota (
anonymous-feedback.hbsewhite-board.hbs) agora são extremamente simples. Eles apenas instanciam este componente e passam os parâmetros corretos (por exemplo, título, URLs da API). Esta abordagem DRY (Don’t Repeat Yourself) torna o código do frontend limpo e fácil de manter.
-
Análise Profunda: Anonimato e Limitação de Taxa (HMAC)
Um recurso central deste plugin é o equilíbrio entre anonimato absoluto e proteção contra abusos (spam).
O Problema: Endereços IP Finitos
Os endereços IPv4 consistem em um conjunto finito de combinações (aproximadamente 4,3 bilhões).
- O Risco: Funções de hash (como SHA256) são funções unidirecionais irreversíveis. No entanto, se simplesmente armazenássemos
SHA256(IP_Address), um atacante (ou administrador) poderia pré-calcular os hashes para todos os endereços IP existentes (uma “Tabela Arco-íris”) em segundos. Ao comparar o hash armazenado com sua lista, eles poderiam revelar imediatamente o IP original.
A Solução: HMAC com um Segredo Rotativo
Usamos HMAC (Hash-Based Message Authentication Code). Isso combina a mensagem (IP) com uma Chave Secreta criptográfica antes de fazer o hash.
-
O Mecanismo:
Identificador = HMAC(IP_Address + Secret_Key) -
Por que funciona: Mesmo que o atacante conheça todos os endereços IP possíveis, ele não conhece a
Secret_Key. Sem essa chave, ele não pode pré-calcular os hashes. O ataque de “Tabela Arco-íris” torna-se impossível porque a variável secreta está faltando.
Sigilo Futuro (Rotação de Chave)
A Secret_Key é rotacionada automaticamente (por exemplo, a cada 4 horas).
-
Cenário: Imagine que o servidor foi hackeado e o atacante roubou a
Secret_Keyatual e o banco de dados. -
Proteção: Como a chave muda regularmente e as chaves antigas são descartadas permanentemente, o atacante só pode calcular hashes de IP para a janela de tempo atual (por exemplo, as últimas 4 horas). Todas as atividades de ontem ou da semana passada foram hashadas com chaves que não existem mais. Isso garante Sigilo Futuro: o anonimato passado não pode ser quebrado, mesmo que o sistema atual seja comprometido.
Rotação Rápida vs. Lenta
Você pode configurar o intervalo de rotação (hmac_rotation_hours).
-
Rotação Rápida (por exemplo, 1 hora):
-
Prós: Anonimato máximo. A janela de tempo em que ações distintas podem ser vinculadas ao mesmo ator (desconhecido) é muito curta.
-
Contras: “Perda de memória” para limitação de taxa. Quando a chave é rotacionada, o servidor “esquece” quem já enviou mensagens. Um spammer bloqueado na Hora 1 é efetivamente desbloqueado na Hora 2.
-
-
Rotação Lenta (por exemplo, 24 horas):
-
Prós: Proteção mais forte contra spam, pois os bloqueios persistem por mais tempo.
-
Contras: Dentro desta janela de 24 horas, um administrador pode ver que o “Usuário X” enviou 5 mensagens, mesmo que não saiba quem é o “Usuário X” (Vinculabilidade).
-
Recomendação: Um valor entre 4 e 12 horas oferece um equilíbrio sólido.