如何阻止谷歌随机化 xmpp 资源

Posted

技术标签:

【中文标题】如何阻止谷歌随机化 xmpp 资源【英文标题】:How to stop google from randomizing xmpp resource 【发布时间】:2013-01-30 10:29:28 【问题描述】:

在 XMPP(即 gtalk)中,我们可以将资源设置为我们想要的(指定机器/位置/等),这适用于所有/大多数服务器和客户端。但在谷歌的情况下,它并不能完全按预期工作,因为每次用户连接谷歌都会将随机字符串附加到用户设置的资源中。这尤其令人讨厌,因为许多客户端通过 jid 和资源部分来区分用户聊天,这会导致在重新连接(并生成新资源)后打开多个窗口/选项卡。

tl;dr - 有没有办法阻止谷歌将随机字符串附加到用户设置的资源?

【问题讨论】:

【参考方案1】:

简短的回答,没有办法。出于安全原因,资源应该是不可预测的。 GTalk 服务器通过向您的资源添加随机字符串来强制执行此操作。

【讨论】:

你能解释一下为什么它应该是不可预测的吗?我一直很喜欢向某些资源发送消息(例如,alice@example.org/mobile 如果紧急,alice@example.org/home 如果不是) 当我能猜出你的资源并知道你的 jid 时,我可以用 IQ 向你发送垃圾邮件 而这种“智商”垃圾邮件只有在您猜测/知道资源的情况下才有可能?所以不指定任何资源就不能简单地使用alice@example.org 是的,Iqs 总是发送到完整的 jid(有一些例外,如 vcard) 那么您不会显示它,但它仍然会通过网络路由到您的客户端,这很糟糕。只需使用不可预测的资源,您就可以了。我们今天有其他 xmpp 协议扩展,例如 caps 或 disco,以公开我们很久以前在资源中放置的东西,直到我们找到更好的方法。另请参阅上面乔的回复。【参考方案2】:

除了@Alex 的正确答案,不要在语义上使用资源。对于聊天,客户真的不应该再将每个资源视为单独的对话。我们在十多年前就吸取了这一教训。要识别客户端,请使用 XEP-0115 而不是硬编码资源。

【讨论】:

“我们十多年前就吸取了教训”指的是什么? 好的,但是在这种情况下,我们在哪里/如何设置资源优先级?更不用说对我们要将消息发送到哪里(即发送到什么“终点”)的任何控制? @Joe Hildebrand 你介意回答 cmets 要求澄清吗?

以上是关于如何阻止谷歌随机化 xmpp 资源的主要内容,如果未能解决你的问题,请参考以下文章

每次点击随机化按钮时,如何从 restaurantList 访问随机值

如何以相同的方式随机化两个 ArrayList?

如何在每个构建中随机化 ProGuard 字典?

如何创建随机数的多个阵列为JavaScript数据随机化?

VBA - 如何使随机化字符串数组工作?

随机化一个整数数组[重复]