【问题标题】:What is the session's "secret" option?会话的“秘密”选项是什么?
【发布时间】:2018-08-23 19:12:10
【问题描述】:

我对密码学一无所知。我想知道会话秘密是什么。

我看到这样的代码:

app.use(express.session({
  store: mongoStore({
    url: app.set('db-uri')
  }),
  secret: 'topsecret'
}));

秘诀是什么,我应该改变它吗?

【问题讨论】:

    标签: node.js session connect


    【解决方案1】:

    是的,你应该改变它。 connect 中的会话密钥仅用于计算哈希。如果没有字符串,对会话的访问基本上会被“拒绝”。看看connect docs,应该会有所帮助。

    【讨论】:

    • 不仅可以改,还应该改。
    • @MichaelMior,多久一次?
    • @FRD 我的意思是你不应该保留topsecret 之类的默认值。秘密应该是一个随机的字符串。理想情况下,您还应该定期更改它以防被发现。但是,这需要支持密钥轮换,因此您不会立即使现有会话无效。也就是说,两个会话秘密应该同时被认为是有效的。据我所知,Express 目前不支持轮换密钥。
    • @MichaelMior express-session 自 1.11.0 起支持秘密轮换。来自文档:“如果提供了一组秘密,则只有第一个元素将用于签署会话 ID cookie,而在验证请求中的签名时将考虑所有元素。” (详情请参阅expressjs/session#127。)
    • 这里问了两个问题:“秘密是什么”和“我应该改变它吗”。只回答了后一个问题。
    【解决方案2】:

    秘密用于使用 HMAC 对会话进行哈希处理:

    https://github.com/senchalabs/connect/blob/master/lib/middleware/session.js#L256

    然后通过检查指纹与带有密钥的哈希值来保护会话免受会话劫持:

    https://github.com/senchalabs/connect/blob/master/lib/middleware/session.js#L281-L287

    【讨论】:

    • 哈希如何防止会话劫持?如果攻击者有会话cookie,那么他们不也有哈希吗?如果攻击者没有拥有 cookie,那么秘密哈希如何使其更难猜测(而不是仅仅拥有更长的随机会话 ID)?
    • 秘密是哈希的盐,这只会让某人更难:1. 解密钓鱼 cookie,2. 通过冒充用户来欺骗会话,因为他们没有秘密(盐)他们无法产生正确的会话ID。
    • 这两个链接都是无效的,因为这是一个 3 岁的答案。
    • @mattdlockyer 这并不能保护您免受会话劫持。为什么攻击者会尝试解密 cookie?如果攻击者拥有 cookie,那么他/她已经拥有完全访问权限,直到会话结束。我的意思是这不像人们将他们的用户密码存储在 cookie 中,那太荒谬了。像 jwt 这样的东西几乎总是应该避免的。
    • @java-addict301 会话劫持可以通过社会工程或用户在其计算机上下载的某些恶意软件、流氓浏览器扩展程序或流氓第三方 JS 依赖项发生。所有这些从应用程序开发人员的角度来看,这些方法很难防止。这就是为什么我说不可能预先防止它,但可以检测和缓解。
    猜你喜欢
    • 2017-10-08
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 2013-09-15
    • 2016-04-29
    • 2017-08-07
    相关资源
    最近更新 更多