2011-12-19 72 views
13

我最近被告知,在URL中使用mongodb _id字段是不安全的。我想知道这是否属实。ID(来自mongo的ObjectIds)可安全地在URL中使用吗?

我的网站仅限注册用户,并且每个用户的网址端点都包含来自mongo的ID。这是典型的mongodb _id字段 - 一个SHA1。 AFAIK,这个id是不可猜测的,即使有人碰到别人的id,基于会话的身份验证在我的应用程序中也不允许访问。除应用程序本身之外,没有人可以直接访问数据库。

我很想知道是否有什么我失踪。

编辑:澄清的问题。 (mongodb ObjectIDs不是SHA1)

+0

相关:http://stackoverflow.com/questions/9452786/mongo-objectids-safe-to-use-in-the-wild?rq=1 http://stackoverflow.com/questions/11577450/are- mongodb-ids-guessable – Thilo 2016-09-30 00:21:24

回答

18

_id来自MongoDB的字段是(默认情况下)ObjectID类型。它是而不是一个SHA1。

而且它的字符串表示(如4ed7cbfd1d96406ca0000015是肯定的,URL安全的。我用它无处不在。

我的意思是,它是安全的无处不在揭露它,你会放一个普通INT标识符(/products/3/users/42或其他)

在您的网站上,您应该检查用户是否已登录并且是否有权访问给定的URL。您不应该盲目地允许用户访问其中存在ObjectID的URL,仅仅是因为它们(ids)不容易猜到(它们比SHA1容易)

+0

这就是我的想法。另外,稍微修正了我的问题,使我看起来稍微不那么愚蠢,关于sha1/objectid的差异。太感谢了。 – 2011-12-19 12:52:13

3

它是在URL中而不是数字中使用看似随机的字符串作为_id(或创建guid)是一个好主意。如果你有公共API,用户/ 1001,用户/ 20032它只是乞求黑客猜测下一个号码并进入随机用户信息。

相关问题