使用哈希登录会话ID

时间:2011-02-15 20:34:31

标签: security session cookies login digital-signature

我已经读过,处理登录会话的常用方法是存储一个长的随机字符串服务器端,并设置一个以此字符串作为其值的cookie。

为什么不应该尝试使用不同的方法来消除服务器上的负载,这是什么原因。我最关心的方法是存储一个cookie,其中包含有关登录用户(以及会话等)的信息,并通过签名来确保cookie的真实性,而不是持久保存特定于cookie的数据服务器端。

3 个答案:

答案 0 :(得分:2)

只有服务器使用的任何数据都比使用cookie读取用户名和密码要安全得多,服务器处理的整体数据越少,直到您需要安全性。

典型地,您只需要一个令牌cookie即可链接到会话ID,这样您就可以在不存储密码的情况下保持登录状态。

答案 1 :(得分:1)

正确完成,这可以像随机cookie解决方案一样安全。尽管如此,这可能有点困难。 (请记住,您无法在cookie中存储秘密值。)

但是,如果操作正确,它也可能不会减少服务器上的负载。虽然您不再需要查找(某些)会话信息,但您需要对每个请求执行加密操作以验证cookie。 (这可能非常昂贵。)

几年前,当我为不支持会话的系统构建类似于此的解决方案时,cookie由数据(使用AES128加密)和消息验证代码(HMAC_SHA256)组成。只有在经过重大安全审查之后,我们才能轻松部署它。

答案 2 :(得分:0)

假设您在登录后通过将用户与会话ID相关联来跟踪用户:

如果您将客户端的所有状态存储在已签名的cookie中(例如,即使它只是他们的登录ID),如果您的签名密钥遭到破坏,您可能会冒充当其他用户的风险。您可以在某种程度上通过为每个用户使用单独的签名密钥来缓解这种情况,但现在您需要使用cookie来跟踪用户正在使用的签名密钥。您还可以尝试使用时间方案对密钥进行签名(例如,每隔5分钟轮换一次),但现在您将在服务器上放置签名负载,以便每隔5分钟为所有会话重新生成cookie签名。

将计算难度很大的哈希值存储为cookie中的会话标识符,并将该哈希值与服务器端的用户ID相关联,计算密集程度更高,并且可能实际上更安全 - 您只需要生成哈希一次,然后在每次Web请求进入时查找(这很容易)。