代码之家  ›  专栏  ›  技术社区  ›  Ahmed

Redis iOS客户端安全使用WebSocket

  •  0
  • Ahmed  · 技术社区  · 6 年前

    我目前正在使用WebSocket从iOS客户端与Redis实例通信。我指定主机地址和监听端口,并直接从iOS客户端执行一些redis命令。

    我之所以这样做,是因为我正在进行实时地理位置跟踪,并且从后端执行这些命令(在PHP中),这将导致延迟。

    恐怕这不是最安全的方法,因为如果有人知道我的主机地址和端口,他就可以访问我的redis实例。

    我的问题是,如何使用WebSocket从iOS客户机与Redis实例进行通信,但更安全。

    3 回复  |  直到 6 年前
        1
  •  1
  •   Myst    6 年前

    @艾哈迈德,

    我阅读了@thatchampbellkid提供的答案和评论,了解您希望iOS客户端与Redis服务器直接通信。

    然而, Redis was NOT designed for this approach . 如文件所示(增加重点):

    Redis设计为 受信任的客户端 里面 受信任的环境 .

    互联网是 可信环境和直接访问允许非可信客户端访问Redis。

    相同的文档给出了以下示例(强调已添加):

    在直接暴露在Internet上的单个计算机的常见情况下,例如虚拟化Linux实例(Linode、EC2,…),则 Redis端口应该有防火墙以防止从外部访问 . 客户端仍然可以使用环回接口访问redis。

    正确的方法是使用动态应用程序对客户端进行身份验证,并在客户端和Redis服务器之间建立桥接。

    您可以使用JWT(由@ TeaCabbByd提出的NGIX模块)、PHP、Ruby、NoDE.JS、Java、C或任何您想要的东西,但是您需要使用一些东西。

    很抱歉这么说,但是任何其他快捷方式都会使您的系统面临安全风险。


    编辑 :

    是的,您仍然可以使用WebSocket。

    不同之处在于,此架构不安全:

    Client <=(WebSockets)=> Redis
    

    这个体系结构是安全的(如果正确实现的话):

    Client <=(WebSockets)=> Authentication Layer <=(TCP)=> Redis
    
        2
  •  1
  •   ThatCampbellKid    6 年前

    根据项目的设置,有两种方法可以做到这一点。您可以在接受JSONWeb令牌进行身份验证的php/redis容器前面添加一个nginx负载均衡器。 https://www.nginx.com/blog/authentication-content-based-routing-jwts-nginx-plus/

    Redis也可以进行身份验证,但它看起来并不是最佳实践,但您也可以在这里找到更多有关它的信息: https://redis.io/commands/auth

        3
  •  0
  •   miknik    6 年前

    正如你所说,你已经在运行nginx,然后看看 Nchan websockets module

    然后,您的nginx安装可以直接为websocket连接提供服务,它支持多种客户端身份验证方法以及与redis的直接集成。