Javascript express会话中间件中的秘密的用途是什么?

Javascript express会话中间件中的秘密的用途是什么?,javascript,express,express-session,Javascript,Express,Express Session,我在读《速成自述》,上面写着这个秘密: 这是用于对会话ID cookie进行签名的秘密。[……] 使用无法猜到的秘密会降低保密能力 劫持会话以仅猜测会话ID(由 genid选项) tbh:我真的不明白 我认为机密的目的是与会话ID一起用作某种散列函数的参数,以生成签名(如散列(secret,sessionID)=>signature),并将该签名附加到cookie中的会话ID值上 因此,如果有人猜到了正确的会话ID,它仍然无法工作,因为签名不匹配 这个秘密实际上是用来做什么的?当出现这样的问题

我在读《速成自述》,上面写着这个秘密:

这是用于对会话ID cookie进行签名的秘密。[……]

使用无法猜到的秘密会降低保密能力 劫持会话以仅猜测会话ID(由 genid选项)

tbh:我真的不明白

我认为机密的目的是与会话ID一起用作某种散列函数的参数,以生成签名(如
散列(secret,sessionID)=>signature
),并将该签名附加到cookie中的会话ID值上

因此,如果有人猜到了正确的会话ID,它仍然无法工作,因为签名不匹配


这个秘密实际上是用来做什么的?

当出现这样的问题时,通常最好只看一下源代码,看看这个秘密是如何使用的。这是使用开源代码的优点之一

在快速会话代码中,机密用于对cookie的值进行“数字签名”,正如您在快速会话代码中看到的那样。这允许会话代码检测cookie值是否被篡改,或者它是否仍然是服务器上最初设置的真实值,从而使它们在暴力会话攻击中更难“猜测”

稍后(在代码中)读取cookie值时,将检查该值是否已使用正确的密码正确签名。如果不是,则放弃(未使用)cookie值

这是一种防止黑客编造自己的cookie值或修改cookie值的方法,因为只有使用适当密码签名的值才会被测试为有效

签名过程还有一个附带的好处,即它使值变长,看起来有些随机,因此它模糊了基础值,使其更难猜测。经典的例子是,如果底层会话id只是一个单调递增的数字,那么很容易猜测将来或以前的会话值。但是,一旦它被签名,它就不再像一个简单的单调递增的数字,而且不容易猜测过去或未来的签名会话值。尽管express session使用a作为其会话id,但在对其进行签名时,该值会扩展到非常长的长度,这使得猜测和查找有效会话变得更加困难(我查看的签名cookie值是80字节长(经过一些编码)


仅供参考,这里有一个关于“为什么要签署cookie?”的简化讨论:来自express session github存储库。

当出现类似问题时,通常最好只查看源代码,看看如何使用这个秘密。这是使用开放源代码的优势之一

在express会话代码中,机密用于对您在express会话代码中看到的cookie值进行“数字签名”。这允许会话代码检测cookie值是否已被篡改,或者它是否仍然是服务器上最初设置的真实值,从而使其更难“猜测”在一次暴力攻击中

稍后(在代码中)读取cookie值时,将检查该值是否已使用正确的密码正确签名。如果未正确签名,将丢弃(未使用)cookie值

这是一种防止黑客编造自己的cookie值或修改cookie值的方法,因为只有使用适当密码签名的值才会被测试为有效

签名过程还有一个副作用,即它使值变长,看起来有些随机,因此它模糊了基础值,使其更难猜测。经典的例子是,如果基础会话id只是一个单调递增的数字,那么很容易猜测未来或以前的会话值。但是,一旦签名,它就不再像一个简单的单调递增的数字,也不容易猜测过去或将来的签名会话值。尽管express session使用a作为其会话id,但在签名时,该值会扩展到更长的时间,这使得猜测和查找有效会话变得更加困难(我查看的签名cookie值是80字节长(经过一些编码)


仅供参考,这里有一个关于“为什么要在cookie上签名?”的简化讨论:来自express session github存储库。

感谢您提供的详细答案,以及链接到的问题链接。但这不是我真正的问题,因为我想我已经指出了这个目的。我引用的第二句话说,一个秘密将“将劫持会话的能力降低为仅猜测会话ID(由genid选项确定)。"这听起来好像是秘密保护不受其他东西的影响,猜测会话ID仍然是可能的。在这一点上,我认为要么我对句子的理解是错误的,要么是文档本身。@0xnoob-正如我的回答和链接问题所解释的,签名使得攻击者猜测会话cookie变得更加困难。这就是“减少劫持会话的能力”因为现在更难猜测cookie需要什么才能访问某人的会话。是否有某些部分您不理解,或者这不是您要问的?@0xnoob-猜测会话仍然是可能的。签名使猜测变得更难。仅供参考,无法支持session的现有行为ns(他们今天的工作方式)并且使它们完全不可能被猜测。因此,我们满足于让它们难以猜测,以至于通过猜测来完成任何有用的事情基本上是不切实际的。@0xnoob-如果攻击者窃取了您的会话cookie,那么他们就可以访问您的会话。express会话中没有任何东西可以防止这种情况发生。但是,任何具有后果的会话都应该d将通过https提供服务,因此窃取cookie的唯一位置是端点