【问题标题】:External (internet) Pub Sub外部(互联网)Pub Sub
【发布时间】:2015-01-09 02:41:16
【问题描述】:

最近我开始考虑一种解决方案,通过互联网向我拥有的订阅客户发布消息。我们的系统是用 C# 开发的。

我们尝试使用Redis,它在速度和准确性方面工作得非常好,但在安全性方面非常糟糕,每个人都可以订阅一切,我能做的最好的是: 1) 重命名核心功能,使其无法使用 2)添加身份验证(但它是每个服务器,而不是每个客户端)

我有两个问题: 1)我可以在 Redis 安全方面做更多的事情吗?我可以为每个订阅者设置密码吗?每个频道? 2) 你们还有其他的解决方案吗?

谢谢!

【问题讨论】:

    标签: c# redis


    【解决方案1】:

    Redis 几乎没有任何访问控制(只是通用的 AUTH),甚至计划中的 ACL 功能也不包括对订阅/发布到特定频道的明确支持。

    但是...如果您禁用 MONITOR 和其他可用于侦听其他客户端连接的命令,您可以做一件令人惊讶的简单事情,即使用 HMAC 将逻辑通道名和密码,以获得真实的通道名,不知道密码的客户端是猜不到的。

    这是架构(但您应该仔细考虑这是否安全,具体取决于您的确切设置、连接加密、启用的命令集。我可以保证获取频道名称是加密困难的,并且没有频道名字可以随便猜)。

    例如频道“foo”的密码是“bar”。要获取您执行的频道名称:

    HMAC-SHA256("bar","foo") -> 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b
    

    你有你的频道名称。

    重要提示:请注意,使用相同错误(旧)密码的 N 个客户端仍然可以通信。这在大多数设置中应该不是问题,因为在这种情况下它们可以进行通信,只需订阅相同的频道名称即可。

    重要提示2:如果这是通过 Internet,您应该通过 SSL 或 VPN 隧道传输所有这些。

    重要提示3:除此之外,请确保还使用 AUTH 作为额外的身份验证层。

    【讨论】:

    • 感谢重播!你帮了忙!总结一下:1)删除未使用/有风险的命令。 2) 加密频道名称。 3)在此之上使用 AUTH。 4) 在所有通信中使用 SSL。我还可以添加 5) 在服务器的防火墙中添加白名单 ip 列表。你还要加什么吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 1970-01-01
    • 2022-01-13
    • 2021-08-28
    • 2019-01-01
    • 1970-01-01
    • 2017-03-31
    相关资源
    最近更新 更多