我正在为Happstack服务器创建会话系统,我使用mongoDB进行持久存储。我想知道MongoDB ObjectID是否可以安全地用作会话ID。
答案 0 :(得分:2)
一般来说,MongoDB ObjectID是全球唯一的,因此如果您担心碰撞,则是安全的。
但是,如果您正在谈论会话ID,那么问题实际上取决于您是否在加密客户端以及如何加密。通常,这些问题的答案应为是,作为对客户端不透明的加密Cookie值。通常,您使用的任何Web服务器都有实用程序来帮助解决此问题。
同样,如果您只是想确保自己拥有唯一身份证,并希望将对象ID用作来源,那么您就会很好。
答案 1 :(得分:1)
MongoDB ObjectID正好是12个字节[1]长,而会话ID可能实现为32个字节[2]长。不同之处在于,如果攻击者是MongoDB ObjectID,则更容易猜测您的会话ID,但是您的会话安全性通常不仅仅依赖于难以猜测的会话ID。
然而,有一个想法建议会话ID应该至少16字节长[3]。在这种情况下,vanilla 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
答案 2 :(得分:0)
切勿将MongoDB ObjectID用作会话标识符!
很容易猜测,您可以接管某人的会话。您只需要等到有人登录并轻松破解他的会话ID即可。
我在这篇文章中写过关于这种漏洞的文章:https://medium.com/securing/why-is-randomness-important-especially-in-the-world-of-cryptocurrencies-part-1-ebd3343c7b55