是MongoDB的IDS被猜到的?(Are MongoDB ids guessable?)

2019-06-26 10:45发布

如果绑定API调用该对象的ID,可以简单地一个蛮力这个API来获取所有的对象? 如果你想的MySQL,这将是增量整数ID完全可能的。 但对于MongoDB的? 是IDS被猜到的? 例如,如果你知道一个ID,是很容易猜到其它(下一个,上一个)IDS?

谢谢!

Answer 1:

更新2019年1月:由于在评论中提到,下面的信息是真实的,直到3.2版本 。 版本3.4+ 改变了规范 ,使得机器ID和处理ID被合并成一个单一的随机5个字节的值来代替。 这可能使其难以找出其中的文件是从哪里来的,但它也简化了生成和降低冲突的可能性。

原来的答案:

+1塞尔吉奥的回答,在回答他们是否能猜出或不看,他们不是哈希,他们是可以预见的,所以他们可以用“野蛮强迫”给予足够的时间。 可能性取决于你去怎样的ObjectID生成和怎么样猜测。 为了解释,第一,在这里阅读规格:

对象ID规格

那么,让我们一块把它分解件:

  • 时间戳 - 完全可以预测,只要你有生成的数据时的总体思路
  • 机 - 这是几个选项之一,其中一些更容易比别人决定的MD5哈希值,但高度依赖于环境
  • PID - 再次,不是一个数量庞大这里的值,并且可以sleuthed从已知源产生的数据
  • 增量 - 如果这是一个随机数,而不是增量(两者都是允许的),那么它是难以预料

为了扩大对源位。 的ObjectID可由以下产生:

  • MongoDB的本身(但可以迁移,移动,更新)
  • 驾驶员(即插入或更新数据的任何机器上)
  • 你的应用程序(可以手动插入自己的对象ID,如果你愿意的话)

因此,有事情可以做,以使他们更难个别猜测,但没有大量的深谋远虑和保障,对于一个正常的数据集,有效的ObjectID的范围应该是相当容易的工作了,因为它们都带有前缀时间戳(除非你以某种方式操纵这一点)。



Answer 2:

蒙戈的ObjectID从来没有打算从蛮力攻击保护(或任何攻击,对于这个问题)。 他们只是提供全球唯一性。 你应该假定一些对象不能被用户访问,因为该用户不应该知道其ID。

为了您的资源的实际保护,地使用其他技术。

如果你抵御未经授权的访问,将一些授权逻辑在您的应用程序(允许访问的合法用户,拒绝其他人)。

如果你想阻止倾倒的所有对象,使用某种类型的速率限制。 与授权(如果适用)相结合。

可选阅读: 埃里克利珀上的GUID 。



文章来源: Are MongoDB ids guessable?