MongoDB ObjectID 对于会话 ID 是安全的

MongoDB ObjectID safe for session id

我正在为 Happstack 服务器制作一个会话系统,我使用 mongoDB 进行持久存储。我想知道 MongoDB ObjectID 用作会话 ID 是否安全。

一般来说,MongoDB ObjectID 是全局唯一的,因此如果您担心碰撞是安全的。

但是,如果您谈论的是会话 ID,则问题实际上取决于您是否在客户端对其进行加密以及如何加密。通常,这些问题的答案应该是 并且 作为对客户端不透明的加密 cookie 值 。通常,您使用的任何网络服务器都会有实用程序来帮助解决这个问题。

同样,如果您只是想确保拥有一个唯一 ID,并且想使用对象 ID 作为来源,那很好。

MongoDB ObjectID 正好是 12 字节 [1] 长,而 Session ID 可能实现为 32 字节 [2] 长。不同之处在于,如果它是 MongoDB ObjectID,攻击者更容易猜到您的会话 ID,但您的会话安全性通常不仅仅依赖于具有难以猜测的会话 ID。

然而,有想法建议会话 ID 至少应超过 16 个字节长 [3]。在这种情况下,香草 MongoDB ObjectID 对于会话 ID 是不安全的。

[1]。 https://godoc.org/labix.org/v2/mgo/bson#ObjectId [2]. https://astaxie.gitbooks.io/build-web-application-with-golang/content/en/06.2.html [3]. https://www.owasp.org/index.php/Session_Management_Cheat_Sheet

切勿使用 MongoDB ObjectID 作为会话标识符!

很容易猜到,你可以接管别人的会话。您只需要等到有人登录并轻松破解他的会话 ID。

我在这篇 post 中写过关于此类漏洞的文章:https://medium.com/securing/why-is-randomness-important-especially-in-the-world-of-cryptocurrencies-part-1-ebd3343c7b55