使用服务器上的会话存储,会话密钥有什么作用?

时间:2012-10-08 22:04:00

标签: session web-applications rack

我理解如果将会话保存到cookie,您需要使用秘密加密它们,否则恶意客户端可以随意修改其会话。由于许多普遍讨论的原因,这种设计仍然很糟糕。

但是,如果在服务器上保存会话(我碰巧通过Rack:Session:Dalli使用Memcache存储),我理解所有客户端获取的是一个cookie,其中包含服务器用来从商店查找会话的密钥。我仍然设置会话秘密。但我不明白它的作用了。

1 个答案:

答案 0 :(得分:1)

加密大的随机数会导致另一个大的随机数。换句话说,如果没有归因于信息的含义(它只是一个随机数),那么加密就没有安全优势。如果您存储的ID中嵌入了一些信息,例如某个位集或仅使用了某个ID子集,则加密很有用。

会话ID的长度很重要。显然,ID越长,对暴力强迫的抵抗力越大。预期的并发用户会话数也是一个因素,因为会话数减少了查找有效会话ID所需的强力尝试次数。例如,两个同时会话将ID的有效强度降低一位(128位密钥变得与仅一个会话的127位密钥一样有效)。一个亚马逊规模的网站(例如)1,000,000个同时会话将有效地损失20比特的会话密钥强度。

如果您需要防御暴力攻击,请实施中间件来检查。向会话ID添加信息(如应用程序唯一字符串)可以更轻松地检测暴力攻击(并且需要会话ID加密)。请注意,这不会 增强密钥本身的安全性,并且基本上是浪费精力,除非应用程序在呈现不正确的会话ID时采取某些操作。

无论您做什么,只需确保使用SSL并将cookie设置为仅https。会话服务器端超时,并且不依赖于cookie过期以及客户端浏览器的良好意愿。

TL; DR :如果仅使用Cookie进行会话ID存储,则在使用良好的RNG时无需加密。使用SSL并设置Cookie secure attribute