【问题标题】:How it is possible to generate session id in node.js? [duplicate]如何在 node.js 中生成会话 ID? [复制]
【发布时间】:2019-09-23 13:01:32
【问题描述】:

我想处理低级别的会话。如何在 node.js 中生成会话 ID?

【问题讨论】:

    标签: node.js session


    【解决方案1】:

    目前尚不清楚您要达到什么目的,但是...会话 ID 只是一个 ID!您可以根据需要生成它。除了唯一性之外,没有其他要求。不过,让它安全是个好主意。例如,此函数可能是您的会话 id 生成器:

    var crypto = require('crypto');
    
    var generate_key = function() {
        // 16 bytes is likely to be more than enough,
        // but you may tweak it to your needs
        return crypto.randomBytes(16).toString('base64');
    };
    

    您调用generate_key() 并检查它是否存在于数据库中。如果是,你再调用一次,依此类推。

    编辑:让我谈谈 cmets:

    1. 最初我在这里有Math.random(),有人担心这不是加密安全的。虽然这是真的,但我没有看到 OP 要求加密安全的解决方案。据我们所知,他可能不需要它,毕竟我们不知道他正在处理什么样的会话。最终我决定改变它,因为加密解决方案更安全,而且(大部分时间)它没有任何缺点。
    2. Uuid 是可接受的替代方法。我个人更喜欢 uuid4,因为它不会泄露信息,但这并不重要。
    3. 生成任何类型的 id 所需的计算量不太重要,并且大部分时间将由数据库通信主导(如果有的话)。除非您正在处理 pbkdf2 类型的算法。我不会用那个。但如果你是,那么你可能有你的理由。

    【讨论】:

    • 您认为使用加密函数生成会话 id 是一个不错的选择吗?加密在计算中需要大量时间。我宁愿建议通过提供一些种子数据(mac地址)来使用uuid函数,以解决分布式环境中的冲突。 blog.tompawlak.org/generate-unique-identifier-nodejs-javascript
    • 不幸的是,除了唯一性之外还有其他要求,例如不可预测性和足够的随机性。 You should use the Node.js crypto module. Math.Random is seeded from the current time 因此它是可预测的,攻击者可以使用它来预测用户的会话 ID。
    • 这个会话 ID 不安全,所以我在顶部添加了一个注释,这样人们就不会简单地复制和粘贴这个示例。
    • UUID 也不是可接受的会话 ID,除非底层库使用足够随机的源。情况并非总是如此。
    • 我同意随机库(我也从未听说过)也不是一个好主意。但是,您的回答中也有很多意见、不正确的建议和情感。这有害。
    猜你喜欢
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 2014-12-30
    • 2015-04-03
    • 2012-08-12
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    相关资源
    最近更新 更多