我们有一个安装了 QuickBlox 的企业版(实现了 XMPP),希望在我们的 QuickBlox 服务器上为所有用户创建镜像账户。我们还想同步使用关系(例如“客户和提供商”)在我们系统中构建的网络。
简而言之,我们想要导出白名单,将聊天“对手”限制为那些与我们的每个用户已经建立关系的用户。如果 User1 在我们的系统中与 User2 和 User3 建立了现有关系,但与 User4 到 User40 没有建立关系,则我们希望能够使用 QuickBlox API 通过创建白名单来强制执行聊天。
编辑:我们不能使用“诚信系统”的白名单,即必须使用客户端无法规避的服务器端方法进行执行。必须存在一种硬性、不可避免的用户间隔离机制以保护隐私。
问题:
是否有建议的方法为每个用户创建悲观白名单,其中仅包含允许通信的那些用户?或者我们被迫创建和维护“反向黑名单”,其中我们自动创建隐私列表来阻止每个其他用户,并使用API删除每个用户应该能够通信的那些用户?
如果我们必须使用“反向黑名单”,是否有一种方式可以将默认黑名单应用于最初阻止与我们QuickBlox系统中的每个其他用户通信的每个新用户?
(再次强调,我们不能使用“信任系统”列表。如果客户端必须在使用之前请求白名单处于活动状态,那么 可以自由发现 和 然后更改 活动的白名单,或者如果客户端可以拒绝使用列表,那就不够安全。)
简而言之,我们想要导出白名单,将聊天“对手”限制为那些与我们的每个用户已经建立关系的用户。如果 User1 在我们的系统中与 User2 和 User3 建立了现有关系,但与 User4 到 User40 没有建立关系,则我们希望能够使用 QuickBlox API 通过创建白名单来强制执行聊天。
编辑:我们不能使用“诚信系统”的白名单,即必须使用客户端无法规避的服务器端方法进行执行。必须存在一种硬性、不可避免的用户间隔离机制以保护隐私。
使用情况:
QuickBlox(或XMPP)服务器具有从User1到User40的用户。
User1的白名单仅包括[User2,User3]。
如果User1试图联系User15,则我们希望QuickBlox / XMPP注意到User15不在User1的白名单上,并阻止该通信,就像User1已经双向阻止了该用户一样。
隐私列表,也称为黑名单
我在QB的文档中找到了引用XMPP规范文档的地方,并发现了隐私列表的概念,这似乎作为黑名单运行:
- https://quickblox.com/developers/Web_XMPP_Chat_Sample#Privacy_lists
- https://xmpp.org/extensions/xep-0016.html#protocol-syntax
以下仅提供两种黑名单隐私:
您可以选择一种被阻止的逻辑(隐私列表)。有2种类型:
- 单向阻止。您被阻止,但您可以写给已被阻止的用户。
- 双向阻止。您被阻止,您也不能写给已被阻止的用户。
服务器白名单(对话级别而非用户)
我还发现了关于服务器白名单的文档,它似乎在对话/JID级别而不是用户级别上运作:
- https://xmpp.org/extensions/xep-0133.html#edit-whitelist
添加到白名单中的实体可能是RFC 6120中指定的任何形式的JID...白名单可以阻止入站通信、出站通信或两者都阻止...
花名册 -- 仅显示“在线”状态?
还有花名册,类似于白名单,但在我的测试中,它们似乎不能限制任何两个用户之间的通信,这些用户可能不在彼此的花名册中。
也就是说,在我的测试应用程序中,我没有设置值班表,用户可以创建组和一对一的聊天对话,尽管他们没有明确接受任何值班请求。在Android文档中,我发现关于值班表的以下内容:“[值班表]是一个人收到出席更新的用户集合。”我不认为这会阻止除出席提醒之外的任何事情。问题:
是否有建议的方法为每个用户创建悲观白名单,其中仅包含允许通信的那些用户?或者我们被迫创建和维护“反向黑名单”,其中我们自动创建隐私列表来阻止每个其他用户,并使用API删除每个用户应该能够通信的那些用户?
如果我们必须使用“反向黑名单”,是否有一种方式可以将默认黑名单应用于最初阻止与我们QuickBlox系统中的每个其他用户通信的每个新用户?
(再次强调,我们不能使用“信任系统”列表。如果客户端必须在使用之前请求白名单处于活动状态,那么 可以自由发现 和 然后更改 活动的白名单,或者如果客户端可以拒绝使用列表,那就不够安全。)