【问题标题】:C# mongodb ObjectId useage risksC# mongodb ObjectId 使用风险
【发布时间】:2016-05-30 21:26:29
【问题描述】:

我在看 Mongodb ObjectId 对象。 暴露给我的客户(甚至是他自己的 SessionId)似乎是不安全的对象。 虽然我使用以下代码生成随机 ObjectId:

var timestamp = DateTime.UtcNow;
        var machine = _random.Next(10000, 75757575);
        var pid = (short)_random.Next(10000, 75757575);
        var increment = _random.Next(10000, 75757575);

        return new ObjectId(timestamp, machine, pid, increment);

我有时会得到连续的 id,我不希望用户能够猜测 100 万个 id 并最终抓住一个真实的。

有没有办法在 c# 上仍然使用 mongodb 并维护一个安全的 id? 现在,有人说“使用 https”,但这不是问题。 有人可以登录网络,获取 ObjectId 类型的 sessionId 并尝试猜测。

我怎样才能减少发生此类事情的可能性?

【问题讨论】:

    标签: c# mongodb mongodb-.net-driver mongodb-csharp-2.0


    【解决方案1】:

    如果您在数据库中存储了任何敏感信息,您应该在您的应用程序中应用一些 ACL 规则来决定用户是否可以通过 objectId 检索数据。

    【讨论】:

    • 如果我使用 ObjectId 作为从客户端到服务器的请求的用户令牌,您能否举一个简单的 ACL 规则示例?
    • 哦,我明白了。因此,您正在使用 ObjectId 来识别用户。不要那样做。为此目的,在登录时发出一个随机会话令牌
    • 是的,当然。我正在使用这个。会话基本上没有活动一个月。如果用户在一个月后返回,它会被替换。可能会改变它以每月更换一次,不管......没有扩展。但是,这还不够吗?我附加的代码是创建随机会话 ID 的内容。 ObjectId 在这里玩安全吗?
    • 不,ObjectId 不添加任何安全性。为什么不使用标准加密库?像msdn.microsoft.com/en-us/library/… 这样的东西。特别是考虑到极长的 ttl。
    • 我会那样做的。也想过,只是想知道每个请求中的字符串处理是否正确,不浪费
    猜你喜欢
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多