2012-10-08 108 views
0

我知道如果将会话保存到cookie中,您需要使用秘密加密它们,否则恶意客户端可能会随意修改其会话。由于许多普遍讨论的原因,这种设计仍然很糟糕。但是,如果在服务器上保存会话(我碰巧通过Rack:Session:Dalli使用Memcache存储),我知道所有客户端获取的都是一个cookie,其中包含一个服务器用于查找其会话的cookie商店。我仍然设置会话秘密。但我不明白它做了什么。通过服务器上的会话存储,会话秘密会做什么?

回答

1

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

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

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

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

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

+0

好酷我明白。我的会议ID从1增加,所以我需要加密它们,所以他们不能被猜到 –

+0

啊,我认为你使用的是随机会话ID。是的,绝对加密可预测的会话cookie。最好用一个长的机器生成的钥匙。 – Catnapper