PMs are accesible by admins if the admin has the link

I just found out that if someone sends a PM to other person. Let’s say from account joe to jane, and for some reason someone (logged in) finds out the right “topic ID” it can read the PM.

I know is kinda a edge-case and is rather difficult to find out, but automating some kind of scraper to cicle trough all the topics ID anyone could read all the PMs.

I found out because a user replied to the notification email, and I was able to click the link and read the PM in question.

I’m assuming you are a staff member on the forum? You should only be able to do this if you are staff. Staff should have the ability to audit PMs by default, and admins and those with access to the DB would have access to the raw messages anyway.

If you’re needing to provide a truly private system, there is the discourse-encrypt plugin which provides end-to-end encryption of messages.

9 Mi Piace

It’s not a necessity, just didn’t got a thought in that one.

I’ll test with a normal account and update this, just in case.

1 Mi Piace

This is only true for admins, not moderators, so I am editing your title which is incorrect. Moderators also only have access to PMs when they are flagged.

If this is a concern, demote yourself to moderator (by logging in under a different account to taste), or enable logging of PM visits by admins in your site settings.

5 Mi Piace

Domanda potenzialmente stupida: dov’è esattamente questa impostazione? Siamo sulla versione stabile (che in teoria dovrebbe avere questo interruttore) e non riesco a trovarla per niente.

Modifica: Il nostro altro amministratore l’ha trovata: è “log personal messages views” nella scheda “Users”. Sostengo che dovrebbe essere una cosa della scheda Sicurezza, ma posso capire perché sia lì se ci penso un minuto.

2 Mi Piace

Domanda di follow-up: è possibile abilitare il logging quando un amministratore ha visualizzato i messaggi di un account, anche se non ha aperto un messaggio per leggerne il contenuto?

Nel contesto del nostro forum, sarebbe possibile per gli amministratori abusare del loro potere semplicemente vedendo i dettagli di alcuni PM a cui un utente potrebbe far parte - leggere i contenuti non è necessariamente più dannoso che conoscere il nome e quali utenti hanno accesso, cosa che attualmente non viene registrata nonostante l’impostazione sia abilitata. Idealmente, vorremmo risolvere questo problema, e anche registrare ogni volta che un amministratore visualizza i messaggi di cui un utente fa parte, piuttosto che solo quando visualizza il contenuto di un messaggio specifico.

1 Mi Piace

Il modo migliore per farlo è con la crittografia end-to-end, resa possibile dal nostro plugin discourse-encrypt.

Gli amministratori sono administrator del forum e hanno accesso a tutti i dati. Ci sono molti modi per gli amministratori di visualizzare il contenuto dei messaggi senza che venga registrato:

  • scaricare un backup
  • data explorer
  • impersonificazione
  • creazione di chiavi API

Per proteggere completamente gli utenti, la soluzione migliore è utilizzare la messaggistica crittografata. Se non ti fidi dei tuoi amministratori, non dovrebbero essere amministratori.

5 Mi Piace

La mia comprensione è che la maggior parte di quelle cose siano registrabili, che è tutto ciò di cui abbiamo veramente bisogno - ad essere onesti, non sono sicuro di potermi fidare di me stesso a non finire per guardare la pagina dei messaggi di un utente per sbaglio e poi andare avanti come se nulla fosse successo, il che nel nostro caso potrebbe essere dannoso (in particolare, non ci aspettiamo che sia un rischio per la sicurezza, ma un rischio per l’integrità - cioè, non vengono causati danni a lungo termine finché l’utente che ha ottenuto l’accesso a questa conoscenza ne è aperto e si astiene da argomenti pertinenti).\n\nCertamente renderebbe molto più facile garantire che nessuno lo faccia per sbaglio o di proposito senza poi segnalarlo, se fosse registrato con tutti gli altri modi in cui potrebbero accedere agli stessi dati.\n\nSe quelle cose che hai elencato non sono registrabili, allora dovrebbero esserlo, ma anche in quel caso aiuterebbe solo contro un amministratore malintenzionato e non contro uno leggermente negligente.

1 Mi Piace

Puoi nascondere/oscurare i titoli dei messaggi negli elenchi dei messaggi di altri utenti utilizzando il tema del tuo sito.

Se è di proposito, è un’altra questione.

Altri posti dove potresti ottenere queste informazioni di audit: i log del server web.

Sono sicuro che un plugin per registrare queste informazioni non sarebbe difficile, ma non sono sicuro che dovrebbe essere nella nostra roadmap interna.

2 Mi Piace

Come sarebbe possibile farlo senza oscurare anche i propri elenchi di messaggi? Per quanto ne so, non esiste uno slug con il nome utente dell’account che stai visualizzando che potresti usare per influenzare solo le pagine dei messaggi che non sono le tue con CSS.

1 Mi Piace

Potresti essere in grado di utilizzare un selettore sul titolo di quella pagina: “Messaggi” è il tuo, mentre “Nome utente — Messaggi” è di qualcun altro.

2 Mi Piace

Il mio problema principale è che il mio script sembra recuperare i dati prima che vengano aggiornati, cioè posso leggere i metadati al cambio di pagina, ma si aggiorna prima che i dati della pagina vengano aggiornati.

<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>

In pratica, il mio --currUsername viene aggiornato, poi il tag meta viene aggiornato con il nuovo URL, quindi il mio --currUsername è sempre una pagina indietro rispetto a quello che sto effettivamente guardando. Questo accade indipendentemente dal fatto che abbia o meno la riga “window.onload”.

Hai qualche idea su cosa sto sbagliando qui?

L’obiettivo finale è praticamente aggiungere una classe al body in base alla pagina che stai guardando, e poi stilizzare in base a quella. Dovrebbe permetterci di leggere, ad esempio, quel campo titolo invece del campo og:url, e poi aggiungere una classe “myMessages” al body per ottenere l’effetto desiderato in questo caso. In teoria.

1 Mi Piace

Questo è incredibilmente grezzo, ma quanto segue sembra funzionare forzando la funzione JavaScript a ritardare di un ventesimo di secondo:


    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));
    }

Vedrò se riesco a farlo funzionare come previsto.

2 Mi Piace