为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

炎炎设计 2023-07-06 11:03:56
我正在阅读快速会话自述文件,其中讲述了这个秘密:这是用于签署会话 ID cookie 的秘密。[...]使用无法猜测的秘密将降低劫持会话的能力,仅猜测会话 ID(由 genid 选项确定)。https://github.com/expressjs/session#secrettbh:我不太明白。我认为秘密的目的是与会话 ID 一起用作某种哈希函数的参数,以生成签名(如hash(secret, sessionID) => signature),并将该签名附加到 cookie 中的会话 ID 值上。因此,如果有人猜到了正确的会话 ID,它仍然无法工作,因为签名不匹配?这个秘密实际上是用来做什么的?
查看完整描述

1 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

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

这允许会话代码检测 cookie 值是否已被篡改,或者它是否仍然是服务器上最初设置的真实值,并且使它们更难在暴力会话攻击中“猜测”。


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

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

查看完整回答
反对 回复 2023-07-06
  • 1 回答
  • 0 关注
  • 50 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信