Session 在服务器上使用会话存储时,会话机密的作用是什么?

Session 在服务器上使用会话存储时,会话机密的作用是什么?,session,web-applications,rack,Session,Web Applications,Rack,我理解,如果将会话保存到cookie,您需要使用一个秘密对其进行加密,否则恶意客户端可能会随意修改其会话。这种设计仍然很糟糕,原因有很多 但是,如果在服务器上保存会话(我碰巧通过Rack:Session:Dalli使用Memcache存储),我知道客户端得到的只是一个cookie,其中包含服务器用于从存储中查找会话的密钥。我仍然设置了一个会话秘密。但是我不明白它的作用了。加密一个大的随机数会导致另一个大的随机数。换句话说,如果信息没有意义(它只是一个随机数),那么加密就没有安全好处。如果您存储的

我理解,如果将会话保存到cookie,您需要使用一个秘密对其进行加密,否则恶意客户端可能会随意修改其会话。这种设计仍然很糟糕,原因有很多


但是,如果在服务器上保存会话(我碰巧通过Rack:Session:Dalli使用Memcache存储),我知道客户端得到的只是一个cookie,其中包含服务器用于从存储中查找会话的密钥。我仍然设置了一个会话秘密。但是我不明白它的作用了。

加密一个大的随机数会导致另一个大的随机数。换句话说,如果信息没有意义(它只是一个随机数),那么加密就没有安全好处。如果您存储的ID中嵌入了一些信息,比如某个位集或只使用了ID的某个子集,那么加密是有用的

会话ID的长度很重要。显然,ID越长,它对暴力强迫的抵抗力就越强。同时用户会话的预期数量也是一个因素,因为会话数量减少了查找有效会话ID所需的暴力尝试次数。例如,两个同时会话会将ID的有效强度降低一位(128位密钥的有效性与127位密钥仅在一个会话中的有效性相同). 一个同时拥有1000000个会话的亚马逊规模的网站实际上会丢失其会话密钥强度的20位

如果您需要防御暴力攻击,请实现一个中间件来检查这一点。向会话id添加信息(如应用程序唯一字符串)可以使检测暴力攻击更容易(并且需要会话id加密)。请注意,这不会增强密钥本身的安全性,而且基本上是徒劳的,除非应用程序在显示不正确的会话id时采取一些操作

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


TL;DR:如果仅将cookie用于会话ID存储,则如果使用了良好的RNG,则无需加密。使用SSL并设置cookie。

好,我明白。我的会话ID从1开始递增,所以我需要对它们进行加密,这样它们就不会被猜到了。啊,我假设你使用的是随机会话ID。是的,一定要加密可预测的会话cookie。最好使用机器生成的长密钥。