【发布时间】:2016-09-12 20:05:31
【问题描述】:
我正在为 Happstack 服务器制作会话系统,并使用 mongoDB 进行持久存储。我想知道 MongoDB ObjectID 是否可以安全地用作会话 ID。
【问题讨论】:
标签: mongodb session-variables session-cookies
我正在为 Happstack 服务器制作会话系统,并使用 mongoDB 进行持久存储。我想知道 MongoDB ObjectID 是否可以安全地用作会话 ID。
【问题讨论】:
标签: mongodb session-variables session-cookies
一般来说,MongoDB ObjectIDs 是全局唯一的,因此如果您担心冲突,它是安全的。
但是,如果您谈论的是会话 ID,那么问题实际上取决于您是否在客户端对其进行加密以及如何加密。通常,这些问题的答案应该是是并且作为对客户端不透明的加密 cookie 值。通常,您使用的任何 Web 服务器都会有实用程序来帮助解决此问题。
同样,如果您只是想确保自己有一个唯一的 id,并且想使用对象 ID 作为来源,那很好。
【讨论】:
MongoDB ObjectID 正好是 12 字节 [1] 长,而 Session ID 可能实现为 32 字节 [2] 长。不同之处在于,如果是 MongoDB ObjectID,攻击者更容易猜出您的 Session 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。
我在这篇文章中写过此类漏洞:https://medium.com/securing/why-is-randomness-important-especially-in-the-world-of-cryptocurrencies-part-1-ebd3343c7b55
【讨论】: