在不公开服务名称和主机名的情况下使用 Android XMPP Smack

Posted

技术标签:

【中文标题】在不公开服务名称和主机名的情况下使用 Android XMPP Smack【英文标题】:Use Android XMPP Smack without making public the Service Name and the Host name 【发布时间】:2020-01-01 14:51:56 【问题描述】:

正如您在下面的示例代码中看到的,Smack 要求我提供服务名称和主机。我将 Ejabberd 与 Linux 和一个 EC2 实例一起使用。

在检查 XMPP 客户端应用程序时,我看到了使用其他 XMPP 提供商创建帐户的选项。我担心当我向公众发布我的应用程序时,我的 EC2 实例的 DNS 将使人们能够创建大量帐户,而不是直接从我的应用程序而是从任何地方创建。

我应该使用 Firebase Functions 之类的东西吗?或者类似的东西?解决这个问题的最佳方法是什么?我只是不希望主机名公开。

XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration
            .builder();
    config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
    config.setServiceName(serverAddress);
    config.setHost(serverAddress);
    config.setPort(5222);
    config.setResource(context.getResources().getString(R.string.resource_name));
    config.setDebuggerEnabled(true);
    config.setSendPresence(true);
    XMPPTCPConnection.setUseStreamManagementResumptiodDefault(true);
    XMPPTCPConnection.setUseStreamManagementDefault(true);
    mConnection = new XMPPTCPConnection(config.build());
    XMPPConnectionListener connectionListener = new XMPPConnectionListener(type);
    mConnection.addConnectionListener(connectionListener);

【问题讨论】:

您无法阻止主机名的发现——您的应用程序会访问它,因此发现它非常简单。主机名不是也不能是秘密的,这就引出了下一个问题:为什么,具体来说,这是一个问题?您似乎担心人们会在您的服务器上“创建大量帐户”,那么为什么会这样呢?您的服务器是否只是坐在那里,暴露在外,(错误?)配置为允许发现它的任何人创建新帐户,或者......?威胁模型不清楚,这也是您提到 firebase 功能的原因......如何使用这些帮助? 您好,兄弟,感谢您的回答。我已经检查过 Conversations,一个 xmpp 客户端,它允许您向他们自己的 xmpp 提供者或其他 xmpp 提供者注册帐户。我在想,也许有人拿了我的主机名,进入那个应用程序并创建了一个帐户:/ 。你认为有可能让一个 ec2 实例只响应特定的 1 个应用程序而没有其他人。如果这是可能的,那么一切都解决了。我正在考虑将 firebase 函数作为一种解决方案,例如,在没有任何人看到我的主机名的情况下拥有我的主机名并执行所有逻辑。 【参考方案1】:

仅当您在 ejabberd 配置中启用了该选项时,此帐户创建才有效。如果您使用 ProcessOne 和大多数 Linux 发行版提供的标准配置,则应该禁用它。 它应该是这样的:

modules:
  # other modules stuff

  mod_register:
    ip_access: trusted_network

您的 acl 应该与此类似:

acl:
  # other irrelevant acls

  loopback:
    ip:
      - "127.0.0.0/8"
      - "::1/128"

所需的访问规则应该是这样的:

access_rules:
  trusted_network:
    - allow: loopback

这都是根据配置的文档,可以在这里找到:https://docs.ejabberd.im/admin/configuration/

【讨论】:

以上是关于在不公开服务名称和主机名的情况下使用 Android XMPP Smack的主要内容,如果未能解决你的问题,请参考以下文章

C++:在不知道函数名的情况下获取当前函数指针?

如何在不在线公开的情况下将文件存储在 Wordpress 插件中?

如何在不暴露数据库中字段名称的情况下使用 OrderingFilter

如何在不更改域名服务器的情况下测试 CloudFlare

如何在不指定数据库名称的情况下连接到 PostgreSQL?

有没有办法在不使用SNMP的情况下检测连接主机设备的软件版本或内核版本