PMs são acessíveis por administradores se o administrador tiver o link

Acabei de descobrir que, se alguém enviar uma mensagem privada (PM) para outra pessoa, digamos da conta joe para jane, e, por algum motivo, alguém (logado) descobrir o “ID do tópico” correto, poderá ler a PM.

Sei que é um caso de borda e é bastante difícil de descobrir, mas automatizar algum tipo de raspador para percorrer todos os IDs de tópicos permitiria que alguém lesse todas as PMs.

Descobri isso porque um usuário respondeu ao e-mail de notificação, e eu consegui clicar no link e ler a PM em questão.

Estou assumindo que você é um membro da equipe do fórum? Você só deveria poder fazer isso se for da equipe. A equipe deve ter a capacidade de auditar mensagens privadas por padrão, e administradores e aqueles com acesso ao banco de dados já teriam acesso às mensagens brutas de qualquer forma.

Se você precisar fornecer um sistema verdadeiramente privado, existe o plugin discourse-encrypt, que oferece criptografia de ponta a ponta para mensagens.

9 curtidas

Não é uma necessidade, só não pensei nisso.

Vou testar com uma conta normal e atualizar isso, só para garantir.

1 curtida

Isso só é verdade para administradores, não para moderadores, então estou editando seu título, que está incorreto. Moderadores também só têm acesso às mensagens privadas quando elas são sinalizadas.

Se isso for uma preocupação, rebaixe-se a moderador (fazendo login em uma conta diferente para testar) ou habilite o registro de visitas às mensagens privadas por administradores nas configurações do seu site.

5 curtidas

Pergunta potencialmente idiota - onde exatamente fica essa configuração? Estamos na versão estável (que realmente deveria ter essa opção, em teoria) e não consigo encontrá-la de jeito nenhum.

Editar: Nosso outro administrador a encontrou - é “registrar visualizações de mensagens pessoais” na aba “Usuários”. Eu argumentaria que deveria ser algo da aba de Segurança, mas posso ver por que estaria lá se pensar um pouco.

2 curtidas

Pergunta de acompanhamento - é possível habilitar o registro quando um administrador visualizou as mensagens de uma conta, mesmo que ele não tenha aberto uma mensagem para ler seu conteúdo?

No contexto do nosso fórum, seria possível para os administradores abusarem de seu poder ao simplesmente ver os detalhes de certas MPs das quais um usuário pode fazer parte - ler o conteúdo não é necessariamente mais prejudicial do que saber o nome e quais usuários têm acesso, o que atualmente não é registrado, apesar de essa configuração estar habilitada. Idealmente, gostaríamos de corrigir isso e também registrar sempre que um administrador visualizar as mensagens das quais um usuário faz parte, em vez de apenas quando ele visualiza o conteúdo de uma mensagem específica.

1 curtida

A melhor maneira de fazer isso é com criptografia de ponta a ponta, possibilitada pelo nosso plugin discourse-encrypt.

Os administradores são os administradores do fórum e têm acesso a todos os dados. Existem muitas maneiras para os administradores visualizarem o conteúdo das mensagens sem que isso seja registrado:

  • baixar um backup
  • explorador de dados
  • personificação
  • criar chaves de API

Para proteger totalmente os usuários, a melhor solução é usar mensagens criptografadas. Se você não confia em seus administradores, eles não deveriam ser administradores.

5 curtidas

Meu entendimento é que a maioria dessas coisas são registráveis, o que é tudo o que realmente precisamos - para ser honesto, não tenho certeza se confio em mim mesmo para não acabar olhando a página de mensagens de um usuário por acidente e simplesmente seguir em frente como se nada tivesse acontecido, o que em nosso caso poderia ser prejudicial (em particular, não esperamos que seja um risco de segurança, mas um risco de integridade - ou seja, danos a longo prazo não são feitos, desde que o usuário que obteve acesso a esse conhecimento seja aberto sobre isso e se abstenha de tópicos relevantes).\n\nCertamente tornaria muito mais fácil garantir que ninguém faça isso por acidente ou de propósito sem depois relatar, se fosse registrado com todas as outras maneiras pelas quais eles poderiam acessar os mesmos dados.\n\nSe essas coisas que você listou não forem registráveis, então deveriam ser, mas mesmo assim, isso só ajudaria contra um administrador malicioso e não contra um ligeiramente descuidado.

1 curtida

Você pode ocultar/obscurecer os títulos das mensagens nas listas de mensagens de outros usuários usando o tema do seu site.

Se for de propósito, é outra questão.

Outros lugares onde você poderia obter essas informações de auditoria: os logs do servidor web.

Tenho certeza de que um plugin para registrar essas informações não seria difícil, mas não tenho certeza se deveria estar em nosso roteiro interno.

2 curtidas

Como seria possível fazer isso sem obscurecer também as suas listas de mensagens? Pelo que sei, não há um “slug” com o nome de usuário da conta que você está visualizando que possa ser usado para afetar apenas as páginas de mensagens que não são suas com CSS.

1 curtida

Você pode usar um seletor no título da página - “Messages” é o seu vs. “Username — Messages” é de outra pessoa.

2 curtidas

Meu principal problema é que meu script parece buscar os dados antes que eles sejam atualizados - ou seja, posso ler os metadados em uma alteração de página, mas ele é atualizado antes que os dados da página sejam atualizados.

<script type="text/discourse-plugin" version="0.8">
    api.onPageChange(() => {
        window.onload = determineUser();
    });
    
    function determineUser() {
        var pageURL = document.querySelector("meta[property='og:url']").getAttribute("content");
        var userPage = pageURL.includes("https://www.fortressoflies.com/u/");
        document.documentElement.style.setProperty('--currUsername', pageURL);
        
        if(userPage)
        {
            document.documentElement.style.setProperty('--lastUsername', pageURL);
        }
    }
</script>

Basicamente, meu --currUsername é atualizado, então a meta tag é atualizada com a nova URL, então meu --currUsername está sempre uma página atrás do que eu estou realmente olhando. Isso ocorre independentemente de eu ter ou não a linha “window.onload”.

Alguma ideia do que estou fazendo de errado aqui?

O objetivo final é basicamente adicionar uma classe ao corpo com base na página que você está olhando e, em seguida, estilizar com base nisso - isso permitiria ler, por exemplo, esse campo de título em vez do campo og:url, e então adicionar uma classe “myMessages” ao corpo para obter o efeito desejado neste caso. Em teoria.

1 curtida

Isso é incrivelmente improvisado, mas o seguinte parece funcionar forçando a função JavaScript a esperar por um vigésimo de segundo:


    api.onPageChange(() => {
        window.onload = determineUser();
    });

    async function determineUser() {
        await sleep(50);
        var pageURL = document.querySelector("meta[property='og:url']").getAttribute("content");
        var userPage = pageURL.includes("https://www.fortressoflies.com/u/");
        document.documentElement.style.setProperty('--currUsername', pageURL);
        if (userPage)
        {
            document.documentElement.style.setProperty('--lastUsername', pageURL);
        }
    }

    function sleep(ms)
    {
        return new Promise(resolve => setTimeout(resolve, ms));
    }

Veremos se consigo fazer isso funcionar como pretendido.

2 curtidas