快速会话中间件中的秘密的目的是什么?

我正在阅读快速会话自述文件,其中讲述了这个秘密:

这是用于签署会话 ID cookie 的秘密。[...]

使用无法猜测的秘密将降低劫持会话的能力,仅猜测会话 ID(由 genid 选项确定)。

https://github.com/expressjs/session#secret

tbh:我不太明白。

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

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

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


炎炎设计
浏览 69回答 1
1回答

幕布斯6054654

当出现这样的问题时,通常最好只是查看源代码并了解如何使用秘密。这是使用开源代码的优点之一。这允许会话代码检测 cookie 值是否已被篡改,或者它是否仍然是服务器上最初设置的真实值,并且使它们更难在暴力会话攻击中“猜测”。这是防止黑客编造自己的 cookie 值或修改 cookie 值的一种方法,因为只有使用适当密钥签名的值才会被测试为有效。签名过程还有一个附带的好处,即它使值变得更长并且看起来有些随机,因此它掩盖了潜在的值,使其更难以猜测。经典的例子是,如果底层会话 ID 只是一个单调递增的数字,那么很容易猜测未来或之前的会话值。但是,一旦被签名,它就不再看起来像一个简单的单调递增数字,并且不容易猜测过去或未来的签名会话值。尽管express-session使用24字节uid作为其会话id,但在对其进行签名时,该值会延伸到非常非常长,这使得猜测和找到有效会话变得更加困难(我查看的签名cookie值是80字节长(经过一些编码)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript