ログイン時に /u?exclude_groups=admins が機能しない

ログインしていない状態では動作しません:

https://meta.discourse.org/u?exclude_groups=admins&order=likes_received

ログインしていない場合:

ログインしている場合:

これは、自分のフォーラムからログアウトした際に、「いいね」数でソートされたユーザーリストから自分自身が除外されなくなったことに気づいたため、偶然発見しました。

/u?exclude_groups=admins が設定されていても、管理者グループのメンバーが意図的に表示されるようにしているのでしょうか?

これは、デフォルトでログインしていないユーザーに対して管理者グループのメンバーが利用できないためではないかと考えられます。例えば、Meta の管理者グループ https://meta.discourse.org/g/admins で試してみてください。

グループ設定でこれを構成できるはずです(私はテストしていませんが)。これで問題が解決するでしょう。

もし、知らないグループやそのメンバーを見る権限がないグループでユーザーディレクトリをフィルタリングできた場合、情報が漏洩する可能性があります。これは管理者グループにとってはそれほど重要ではないかもしれませんが、Meta の隠されたエンタープライズ顧客グループでユーザーディレクトリをフィルタリングできると想像してみてください。

投稿する前に、ログインしていないユーザーには非表示になっている https://meta.discourse.org/g/admins を確認しました。そのため、このトピックを開始しました。/g/admins は未登録ユーザーには非表示ですが、/u?exclude_groups=admins にアクセスすると、管理者グループのメンバーがまだ表示されてしまうようです。これは少なくとも奇妙に思えます。

今、私は混乱しています。タイトルから考えると、/g/admins/u?exclude_groups=admins の両方がログイン済みのユーザーに対して機能し、ログアウト中のユーザーには機能しないことを期待していました。

もしかすると、グループページにおける「非表示」の状態について、私たちが異なることを話しているのかもしれません。
私が「非表示」と言ったのは、プライベートな状態を意味します。つまり、/g/admins にアクセスすると、ログアウト中のユーザーは「おっと」というエラーページに飛ばされます。あなたは、グループページにデフォルトのグループが表示されない(モデレーターを除く)という事実を指しているのかもしれません。これは、追加のコードによって非表示にされているためです。しかし、グループページにグループが表示されていなくても、リンクをクリックすればそのグループのページにアクセスすることは可能です。

「プライベート非表示」はグループを秘密にするものであり、これがユーザーディレクトリのフィルターが機能しない理由だと私は考えています。それでは情報が漏洩してしまうからです。単に表示されていないだけのグループは、秘密ではありません。

つまり、ログインしているユーザーにのみ制限を設けているのですね。訪問者がグループにアクセスできるようにしたいのであれば、なぜ「全員」を選択するのではなく、メンバーにのみ表示とアクセスを制限するのでしょうか?

ログアウト状態で、URL = /u?exclude_groups=admins:

誤解していたらすみません。/u?exclude_groups=admins は、管理者がリストに含まれないことを意味すると考えていましたが、違いますね。

現在、管理者はログイン中のみ除外されますが、ログアウト状態では含まれます

/u?exclude_groups=admins が登録ユーザーと未登録の両方の訪問者に対して機能すると良いのですが。

そのスクリーンショットで何をお伝えしたいのか、もう少し詳しく説明してもらえますか?

グループへのアクセスをログイン済みのユーザーに限定しているのですね。また、グループメンバーへのアクセスもログイン済みのユーザーに限定しています。

その後、ログインしていないユーザーがグループメンバーのデータにアクセスできないことを示されました。それは当然のことだと考えます。もし両方の設定で「全員」を選択していなければ、そのように動作することは想定されます。

まるで「管理者グループのメンバー情報を訪問者から隠したい」とおっしゃっているように感じられます。しかし同時に、ユーザーディレクトリをフィルタリングするためにそのデータが利用できないと不満を述べておられます。

グループのメンバーが誰なのかを知る権限がない場合、そのメンバーを除外することはできません。

@Moin がここで言ったことに同意します。exclude_groups=admins が機能するようにすると、管理者グループのメンバーを推測できてしまう可能性があります。本来、それらにアクセス権はないはずです。

そのため、これは意図的なものであり、変更される可能性は低いと覚悟してください。管理者グループのメンバーを誰でも推測できるようにしたい場合は、全員に可視化する必要があります。

同じロジックは、単に登録したユーザーにも当てはまります。新しいユーザーがサインアップして exclude_groups=admins を使用すると、管理者がリストから非表示になるため、フィルタリングされたリストと非フィルタリングのリストを比較するだけで、メンバーシップを推測できてしまいます。

「推測する」ためのハードルは、誰でも数秒で取得できる無料アカウントの作成に過ぎません。では、ここでのログアウト済みの訪問者と、わずか1分前に作成されたアカウントとの実際の違いは何でしょうか?

参考までに、私が実際に達成しようとしているのは、サイドバープラグインにあるランキングにおいて、「最もいいねされた数」やトップコントリビューターリストに管理者グループを含めたくないということです。

それはサイトの設定によります。多くのサイトでは、オープン登録が許可されていません。

では、グループの表示設定を調整するのが良い回避策でしょうか?それとも、その方法には問題がありますか?

:slight_smile: たくさんありますよ。私が訪れるほとんどがそうです。

はい、確かにその通りです。しかし、セキュリティ機能に関しては、説明通り正確に動作するように設計する必要があります。グループの所属を非表示にするという設定があれば、それは100%確実に機能しなければなりません。

そのためには、管理者グループとそのメンバーの表示設定を「全員」に変更してはいかがでしょうか。そうすればデータが訪問者にも利用可能になり、フィルタが機能するはずです。特に、誰でもログインして /g/admins にアクセスできるとおっしゃっているので、ログインしていないユーザーもアクセスできても問題ないはずです。

実は、ここではメンバーシップを非表示にしてもあまり信頼性がありません。多くのフォーラム(私のものも含む)では、管理者が最も活発なユーザーの一人だからです。そのため、ディレクトリをアクティビティ順に並べ替えるだけで、すぐに管理者を特定できることがほとんどです。

管理者グループの所属は、露呈しているアクティビティから簡単に推測できます。特に、https://meta.discourse.org/u はデフォルトでアクティビティ順にソートされるためです:

もちろん、すべてのプロフィールを非表示にすることも可能です。しかし、私の主張は、現在の /u?exclude_groups=admins の無視によって主張されているセキュリティ上の利点は、ほとんどないか、表面的なものに過ぎないということです。

つまり、この場合、登録してもセキュリティは向上しません。ログアウト状態でも、単にアカウントを作成すれば、アクティビティレベルが公開されているため、並べ替えによって管理者を特定できます。/u?exclude_groups=admins でリストから除外しようとしても、管理者のアクティビティレベルは公開されたままです。

それが私が最初に報告した理由です。管理者を非表示にすることが意図的なセキュリティ機能であれば、非ユーザーがそれを推測できないように優先されるはずです。しかし現状では逆で、ログアウトしたユーザーは、単にデフォルトの /u にアクセスするだけで、より簡単に特定できてしまいます。

この逆転が、意図したものではないかもしれないと考えさせた理由です。

編集:
私の立場では、本題に戻りますが、これはセキュリティの問題ではありません。それは貴殿側で提起された点です。私は単に、サイドバープラグインおよび /u ページにおいて、管理者のアクティビティがランキングに含まれないようにしてほしいのです。

おっしゃることは理解できますが、グループセキュリティシステムが @admins グループに限定されたものではないことを考慮することが重要です。もしフォーラムに @super-secret-lurkers グループが存在する場合でも、同じセキュリティモデルが機能する必要があります;)

「グループに属していない」を判断できることは、最終的には「グループに属している」を閲覧できることと同じです。

はい、納得です。管理者グループを「全員」に可視化する更新でよろしいでしょうか?

いいえ、その前に試しました。除外が機能するには、非メンバーがグループを閲覧できる必要があるのかと思ったのですが…:confused: しかし、実際には未登録の訪問者に対して/u?exclude_groups=adminsは完全に無視されます。

これはユーザーを隠すことではなく、グループのメンバーが誰であるかという情報を隠すことです。そのため、非公開グループのメンバーはディレクトリに表示されますが、グループのページは表示されません。ユーザーが存在することはわかっても、そのユーザーが秘密のグループに所属しているかどうかはわかりません。

例えば、顧客A専用のグループを作成しても、フォーラムの他のユーザーにそのグループの存在を知られたくないとします。そのような場合、グループの表示を制限できますが、もちろんメンバーは他の場所では表示されます。彼らが投稿していることやユーザーディレクトリに表示されていることは確認できますが、彼らが顧客Aのグループに所属していることはわかりません。

同様に、管理者グループの表示も制限できます。訪問者はそのグループのメンバーが誰であるかを知ることはできませんが、これらのユーザーがフォーラムを利用していることは知ることができます。

なるほど!それならバグの可能性がありますね。
確認ですが、グループの可視性とグループメンバーの可視性の両方を「全員」に設定されていますか?

ログアウトした状態でも、@Moin の管理者が誰であるかがすでに確認できます。全員が一斉に表示されるわけではありません。

ログアウト時:

ただし、私の懸念はここでの秘密性やセキュリティに関するものではありませんでした:

いいえ、私は「このグループのメンバーを誰が見られるか?」のみを切り替えました。

「このグループを誰が見られるか」を有効にしたくありません。なぜなら、それにより /g/admins が公開アクセス可能になってしまうからです。

ただし、/u?exclude_groups=admins が正しく機能するか確認するためにテストしてみます。

すぐ戻ります。