XMPP白名单是什么?

13
我们有一个安装了 QuickBlox 的企业版(实现了 XMPP),希望在我们的 QuickBlox 服务器上为所有用户创建镜像账户。我们还想同步使用关系(例如“客户和提供商”)在我们系统中构建的网络。
简而言之,我们想要导出白名单,将聊天“对手”限制为那些与我们的每个用户已经建立关系的用户。如果 User1 在我们的系统中与 User2 和 User3 建立了现有关系,但与 User4 到 User40 没有建立关系,则我们希望能够使用 QuickBlox API 通过创建白名单来强制执行聊天。
编辑:我们不能使用“诚信系统”的白名单,即必须使用客户端无法规避的服务器端方法进行执行。必须存在一种硬性、不可避免的用户间隔离机制以保护隐私。

使用情况:

QuickBlox(或XMPP)服务器具有从User1到User40的用户。

User1的白名单仅包括[User2,User3]。

如果User1试图联系User15,则我们希望QuickBlox / XMPP注意到User15不在User1的白名单上,并阻止该通信,就像User1已经双向阻止了该用户一样。

隐私列表,也称为黑名单

我在QB的文档中找到了引用XMPP规范文档的地方,并发现了隐私列表的概念,这似乎作为名单运行:

以下仅提供两种黑名单隐私

您可以选择一种被阻止的逻辑(隐私列表)。有2种类型:

  • 单向阻止。您被阻止,但您可以写给已被阻止的用户。
  • 双向阻止。您被阻止,您也不能写给已被阻止的用户。

服务器白名单(对话级别而非用户)

我还发现了关于服务器白名单的文档,它似乎在对话/JID级别而不是用户级别上运作:

花名册 -- 仅显示“在线”状态?

还有花名册,类似于白名单,但在我的测试中,它们似乎不能限制任何两个用户之间的通信,这些用户可能不在彼此的花名册中。

也就是说,在我的测试应用程序中,我没有设置值班表,用户可以创建组和一对一的聊天对话,尽管他们没有明确接受任何值班请求。在Android文档中,我发现关于值班表的以下内容:“[值班表]是一个人收到出席更新的用户集合。”我不认为这会阻止除出席提醒之外的任何事情。
问题:
是否有建议的方法为每个用户创建悲观白名单,其中仅包含允许通信的那些用户?或者我们被迫创建和维护“反向黑名单”,其中我们自动创建隐私列表来阻止每个其他用户,并使用API删除每个用户应该能够通信的那些用户?
如果我们必须使用“反向黑名单”,是否有一种方式可以将默认黑名单应用于最初阻止与我们QuickBlox系统中的每个其他用户通信的每个新用户?
(再次强调,我们不能使用“信任系统”列表。如果客户端必须在使用之前请求白名单处于活动状态,那么 可以自由发现然后更改 活动的白名单,或者如果客户端可以拒绝使用列表,那就不够安全。)
2个回答

3

XMPP客户端

XMPP客户端需要一种方式向其他客户端询问是否支持通过中继接收推送。由于推送可以从任何地方发送,只要他们有朋友的白名单令牌,客户端也可以直接通过中继将推送直接发送给其他客户端。如果一个不支持直接推送的客户端发送了一条消息,XMPP服务器将需要响应以获取白名单令牌,以允许服务器发送推送。

XMPP服务器

XMPP服务器可以询问连接的客户端是否支持推送中继,并在客户端离线时将接收到的消息转发到推送中继服务器。这将需要XMPP服务器从用户处获得白名单令牌。

帮助:请参阅此链接


1
我认为你所描述的是一个推送继电器系统,用于当用户无法直接访问XMPP服务器时。请参考该链接中的以下引用:“因为此方法可以完全绕过XMPP服务器,因此允许非XMPP协议参与”。虽然从某种意义上说,这正是我认为我要走的方向:在QB/XMPP服务器上重载sendMessage并自己处理白名单。也就是说,“XMPP不支持白名单。” 它似乎(不完全巧合;^D)像是一个晚90年代/早00年代风格的聊天协议。 - ruffin

1
如果我们谈论XMPP协议,那么有能力阻止任何通信从/到(请参见示例48
因此,可以为每个用户设置默认值。
然后,如果我们需要允许与特定人通信, 那么您可以使用action = allow将此用户添加到隐私列表中,并将其顺序大于“完全阻止”。这实际上是通过隐私列表实现白名单的好例子,请参见示例8

和(3)“特殊”,只允许与三个特定实体进行通信。


这些选项难道不需要客户端自愿遵守吗?也就是说,如果客户端希望,当发送未被屏蔽的接收者时,似乎他们可以忽略这些隐私列表。如果客户端必须请求激活白名单才能使用它,那么可以自由发现然后更改活动白名单,或者如果客户端可以拒绝使用任何特定列表,那么这不是一个安全的、由服务器执行的解决方案。 - ruffin
如果您没有其他隐私列表或者没有将其标记为活动状态,那么您只能拥有一个隐私列表,该列表将被用作“默认”列表。 - Rubycon
谢谢,但是似乎客户端即使只有一个也可以拒绝使用活动列表。也就是说,我需要一个解决方案,让QuickBlox服务器强制在客户端上使用白名单。我相信你所描述的解决方案,从客户端的角度来看,最终还是可选的。 - ruffin
可能这个操作(设置活动/默认列表)只能允许超级管理员执行,对于普通API用户应该是不可用的。据我所知,这就是您需要的。 - Rubycon
隐私列表由服务器强制执行,但用户可以进行编辑。因此,您需要一个XMPP服务器,该服务器提供禁用用户编辑和禁用隐私列表的选项。请查看您的XMPP服务器文档,了解它是否允许管理员控制并强制执行隐私列表。 - smokku

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接