我对使用redis在服务器端存储客户的会话进行授权很感兴趣。基本上,当客户登录时,散列将存储在redis集群中,并将密钥返回给客户机。每次请求时,客户机都会将密钥作为头传递,服务会检查redis中是否仍然存在哈希,如果不存在,则会返回错误消息。此密钥将在x分钟后过期,导致使用该密钥的任何请求失败。然而,我在网上看到,有些人遇到了问题,因为过期的方式是复制到奴隶。从机只有在从主机收到del命令时才使密钥过期,因此如果在此命令之前在从机上执行“get”,则将返回该密钥处的值。
https://github.com/antirez/redis/issues/187
这个问题还存在吗?这对我来说是个大问题,会造成一个安全漏洞。对于过时的数据来说也许不是什么大不了的事情,但是当使用它进行授权时,它是一件大事
1条答案
按热度按时间idfiyjo81#
a) 不,不是真的-自2014年以来,即使从机尚未从复制流接收到del,获取过期密钥也会在从机上返回“not found”。悬而未决的问题与exists与get不一致有关,这只在依赖exists命令的输出时才重要。
b) 完全独立于这个问题,复制滞后的可能性总是存在的。应用程序的安全性不应该依赖于副本总是最新的这一前提。