我有一个项目,其中我有一些树莓派通过 mqtt 发布和订阅数据连接到代理,这个代理位于远程服务器中。 我想制作一个网页,我们可以在其中与经纪人进行交互,发布和订阅,网络也可以托管在同一台服务器中。
我正在考虑使用 paho 库、websockets 和 tls 证书连接到代理。网络将使用php(laravel框架(与用户身份验证。 总之,我们必须登录该站点并访问某些主题。
我的问题是关于安全性,javascript和websockets的。由于用户将可以访问javascript代码,因此他将可以访问源代码以及我们用于连接到服务器的用户和密码。
它在安全性方面是正确的吗? 我们将使用TLS,Web身份验证和WebSockets。
我正在考虑使用 php 库而不是 websocket 来访问主题,但在这种情况下,所有 cennection 的负载都将在服务器中,我认为这不是正确的方法。我也不知道如何在 Web 界面运行时为订阅保持后台 php 脚本运行。
我是否需要做更多的事情来提高安全性?
感谢您的帮助!!
您不需要将 MQTT 凭证硬编码到 JavaScript 中。
如果将代理配置为使用数据库来存储其凭据,则可以创建可在用户登录到网页时插入到数据库中的临时凭据,然后可以从 Web 服务器检索这些凭据,并使用它们通过 paho 客户端连接到代理。
然后,您可以在用户注销或会话过期时删除凭据。
让我们考虑两种情况:
- MQTT 代理对公共互联网是隐藏的,只有 Web 服务器可以访问它。
- MQTT代理暴露在公共互联网上,并且正在向用户代理发送凭据来操作它。
请注意,2 会大大增加攻击面。实际上,您不仅开始依赖 Web 服务器的正确配置,还依赖于 MQTT 代理(双重麻烦(。如果有零天怎么办?你想让Shodan知道你在那里有服务吗?您将在不知不觉中被黑客入侵。
在企业现实中,第2点是不行的。如果我们能防止 MQTT 代理被暴露,我们就会这样做。在您的项目中 - 您决定。