我无法从文档中找到任何信息,无论秘密应该是静态字符串还是应该/可以是动态的。这就是我现在如何设置秘密的方法。
var salt1 = bcrypt.genSaltSync();
var salt2 = bcrypt.genSaltSync();
var secret = bcrypt.hashSync(salt1 + salt2, 10);
app.use(session({
// activeDuration: toTime("days", 7),
// duration: toTime("days", 7),
maxAge: toTime("days", 7),
saveUninitialized: false,
secret, // set this to a long random string!,
}));
那么秘密应该是一次性的还是动态的?
答案 0 :(得分:5)
通常这些秘密用于签署和/或加密存储在客户端cookie中的会话数据(如果表达它用于签署会话数据以防止篡改)。
所以秘密必须是:
仅供参考,使用bcrypt生成它是没有意义的。 bcrypt的目标是缓慢防止暴力破坏哈希。这与此无关。适当的随机性就足够了。
the docs的相关部分:
这是用于签署会话ID cookie的秘密。这可以是单个秘密的字符串,也可以是多个秘密的数组。
如果提供了一系列秘密,则只会使用第一个元素对会话ID cookie进行签名,而在验证请求中的签名时将考虑所有元素。
由于快速会话支持保留旧秘密,因此您可以轮换活动密钥。例如,每月一次,您可以在阵列中添加一个新的随机密钥,从而允许具有旧秘密的现有会话继续工作,而不会将其用于任何新会话。然后,一旦达到最大年龄,您就可以安全地删除多天未使用的秘密。像这样,会话秘密的意外泄漏会在一段时间后变得无害(除非有人在此期间滥用它)
答案 1 :(得分:3)
动态
静态