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

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

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

おそらく愚かな質問ですが、この設定は具体的にどこにありますか?私たちは安定版(理論的にはこのトグルがあるはずです)を使用していますが、どうしても見つけられません。

編集: 他の管理者がそれを見つけました。それは「Users」タブにある「log personal messages views」です。セキュリティタブのものだと思いますが、少し考えるとそこに配置されている理由もわかります。

「いいね!」 2

フォローアップの質問です。管理者がメッセージの内容を開いて読んだかどうかに関わらず、アカウントが持つメッセージを管理者が閲覧した際にログを有効にすることは可能でしょうか?

私たちのフォーラムの文脈では、管理者が単にユーザーが関与している特定のプライベートメッセージの詳細を見るだけで、その権限を悪用する可能性があります。メッセージの内容を読むこと自体が、誰がアクセスできるか、またそのユーザーの名前を知ることよりも必ずしも有害ではありません。これは、その設定が有効になっているにも関わらず、現在ログに記録されていません。理想的には、これを修正し、管理者が特定のメッセージの内容を閲覧したときだけでなく、ユーザーが関与しているメッセージを閲覧したときもログに記録したいと考えています。

「いいね!」 1

これを実現する最善の方法は、エンドツーエンド暗号化を使用することです。これは、discourse-encrypt プラグインによって可能になります。

管理者はフォーラムの管理者であり、すべてのデータにアクセスできます。管理者がメッセージの内容をログに記録せずに表示する方法はたくさんあります。

  • バックアップのダウンロード
  • データエクスプローラー
  • なりすまし
  • APIキーの作成

ユーザーを完全に保護するには、暗号化されたメッセージングを使用するのが最善の解決策です。管理者を信頼できない場合は、管理者にすべきではありません。

「いいね!」 5

私の理解では、それらのほとんどはログに記録可能であり、それが私たちに必要なすべてです。正直なところ、ユーザーのメッセージページを誤って見てしまい、何事もなかったかのようにそのままにしてしまう自分自身を信用できるかどうかさえわかりません。それは私たちのケースでは有害になる可能性があります(特に、セキュリティリスクになるとは予想していませんが、整合性のリスクです。つまり、この知識にアクセスしたユーザーがそれについてオープンであり、関連トピックから身を引く限り、長期的な損害は発生しません)。

ログに記録されれば、他の方法で同じデータにアクセスできるすべての方法とともに、誰も誤ってまたは意図的にこれを行わないようにすることができます。

あなたがリストしたものがログに記録できないのであれば、それはそうされるべきですが、それでも悪意のある管理者に対してのみ役立ち、少し不注意な管理者には役立ちません。

「いいね!」 1

サイトのテーマを使用して、他のユーザーのメッセージ一覧でメッセージタイトルを非表示/隠蔽することができます。

意図的なものであれば、それは別の問題です。

この監査情報を取得できる他の場所:ウェブサーバーのログ。

この情報を記録するプラグインはそれほど難しくないと思いますが、内部ロードマップに含めるべきかどうかはわかりません。

「いいね!」 2

自分のメッセージ一覧も不明瞭にすることなく、これを実現するにはどうすればよいでしょうか? 私が知る限り、表示しているアカウントのユーザー名のスラッグはなく、CSSで自分自身以外のメッセージページのみに影響を与えることができます。

「いいね!」 1

そのページのタイトルにセレクターを使用できるかもしれません。「Messages」はあなたのもので、「Username — Messages」は他の人のものです。

「いいね!」 2

私の主な問題は、スクリプトがデータが更新される前にデータを取得しているようです。つまり、ページ変更時にメタデータを読み取ることはできますが、ページのデータが更新される前に更新されます。

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

基本的に、--currUsername が更新され、次にメタタグが新しい URL で更新されるため、--currUsername は私が実際に見ているものより常に 1 ページ遅れています。これは、「window.onload」行があるかどうかに関係なく発生します。

何か間違っているところはありますか?

最終的な目標は、基本的に、どのページを見ているかに基づいて body にクラスを追加し、それに基づいてスタイルを設定することです。これにより、例えば、og:url フィールドではなく、そのタイトルフィールドを読み取ることができ、このインスタンスで目的の効果を得るために body に「myMessages」クラスを適用できます。理論上は。

「いいね!」 1

これは信じられないほどぎこちないですが、JavaScript関数を0.05秒間一時停止させることで、次のものが機能するようです。

<script type="text/discourse-plugin" version="0.8">
    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));
    }
</script>

意図したとおりに機能するかどうかを確認します。

「いいね!」 2