最近我開始考慮一個解決方案,通過互聯網向訂閱的客戶端發佈消息。我們的系統是用C#開發的。外部(互聯網)酒吧小組
我們嘗試使用Redis,它在速度和準確性方面非常出色,但在安全性方面非常糟糕,每個人都可以訂閱所有內容,最好的做法是: 1)重命名核心函數所以他們將無法使用 2)添加身份驗證(但它的每個服務器,而不是每個客戶端)
我有2個問題: 1)我可以做更多的Redis安全?我可以爲每個用戶設置密碼嗎?每個頻道? 2)您是否有任何其他解決方案可以意識到?
謝謝!
最近我開始考慮一個解決方案,通過互聯網向訂閱的客戶端發佈消息。我們的系統是用C#開發的。外部(互聯網)酒吧小組
我們嘗試使用Redis,它在速度和準確性方面非常出色,但在安全性方面非常糟糕,每個人都可以訂閱所有內容,最好的做法是: 1)重命名核心函數所以他們將無法使用 2)添加身份驗證(但它的每個服務器,而不是每個客戶端)
我有2個問題: 1)我可以做更多的Redis安全?我可以爲每個用戶設置密碼嗎?每個頻道? 2)您是否有任何其他解決方案可以意識到?
謝謝!
Redis幾乎沒有任何訪問控制(但只是普通的AUTH),甚至計劃的ACL功能也不包括對訂閱/發佈到特定頻道的明確支持。
但是......如果您禁用MONITOR和其他可用於監聽其他客戶端連接的命令(即使用HMAC來散列在一起),您可以執行一個令人驚訝的簡單操作邏輯通道名稱和密碼,以便獲取真正的通道名稱,這對於不知道密碼的客戶端是不可猜測的。
這是模式(但你應該仔細考慮,如果這是安全的,取決於你的確切設置,連接加密,啓用命令集,我可以保證它很難獲取通道名稱,頻道名稱可以隨意猜到)。
例如,頻道「foo」的密碼是「bar」。要獲取通道名稱你做:
HMAC-SHA256("bar","foo") -> 01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b
,你有你的頻道名稱。
重要提示:請注意,具有相同錯誤(舊)密碼的N個客戶端仍可以進行通信。這在大多數情況下都不會成爲問題,因爲在這種情況下,只需訂閱相同的頻道名稱就可以進行通信。
重要2:如果這是通過互聯網,你應該隧道所有這一切通過SSL或VPN。
重要3:除此之外,請確保也使用AUTH作爲附加的身份驗證層。
感謝您的重播!你幫了!作爲總結:1)刪除未使用/有風險的命令。 2)加密頻道名稱。 3)在其上使用AUTH。 4)在所有通信中使用SSL。我也可以添加5)在服務器的防火牆中添加白名單ip列表。你會添加其他東西嗎? –