繁体   English   中英

Redis iOS客户端以安全方式使用WebSocket

[英]Redis ios client using websocket in secure way

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

我这样做的原因是因为我正在进行实时地理位置跟踪并从PHP后端执行这些命令,这会导致延迟。

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

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

有几种方法,具体取决于项目的设置方式。 您可以在php / redis容器前面添加一个NGINX负载均衡器,该负载均衡器接受JSON Web令牌进行身份验证。 https://www.nginx.com/blog/authentication-content-based-routing-jwts-nginx-plus/

Redis也具有进行身份验证的能力,但看上去并没有被认为是最佳实践,但是您也可以在这里找到有关它的更多信息: https : //redis.io/commands/auth

@艾哈迈德(Ahmed)

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

但是, Redis并非为此方法设计的 如文档中所示(添加了重点):

Redis的目的是通过可信任的环境 受信任的客户端访问。

互联网不是受信任的环境,直接访问允许Redis被不受信任的客户端访问。

相同的文档给出了以下示例(添加了重点):

在直接暴露于互联网的单台计算机(例如虚拟化Linux实例(Linode,EC2等))的常见情况下, 应该Redis端口进行防火墙保护,以防止外部访问 客户端仍然可以使用环回接口访问Redis。

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

您可以使用JWT(@ThatCampbellKid建议的nginx模块),PHP,Ruby,node.js,Java,C或任何您想要的东西-但您将需要使用某些东西。

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


编辑

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

区别在于此体系结构不安全:

Client <=(WebSockets)=> Redis

而且此架构是安全的(如果正确实施):

Client <=(WebSockets)=> Authentication Layer <=(TCP)=> Redis

正如您所说的,您已经在运行Nginx,然后看看Nchan websockets模块

然后,您的Nginx安装可以直接为Websocket连接提供服务,并且支持多种客户端身份验证方法以及与Redis的直接集成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM