如果绑定API调用该对象的ID,可以简单地一个蛮力这个API来获取所有的对象? 如果你想的MySQL,这将是增量整数ID完全可能的。 但对于MongoDB的? 是IDS被猜到的? 例如,如果你知道一个ID,是很容易猜到其它(下一个,上一个)IDS?
谢谢!
如果绑定API调用该对象的ID,可以简单地一个蛮力这个API来获取所有的对象? 如果你想的MySQL,这将是增量整数ID完全可能的。 但对于MongoDB的? 是IDS被猜到的? 例如,如果你知道一个ID,是很容易猜到其它(下一个,上一个)IDS?
谢谢!
更新2019年1月:由于在评论中提到,下面的信息是真实的,直到3.2版本 。 版本3.4+ 改变了规范 ,使得机器ID和处理ID被合并成一个单一的随机5个字节的值来代替。 这可能使其难以找出其中的文件是从哪里来的,但它也简化了生成和降低冲突的可能性。
原来的答案:
+1塞尔吉奥的回答,在回答他们是否能猜出或不看,他们不是哈希,他们是可以预见的,所以他们可以用“野蛮强迫”给予足够的时间。 可能性取决于你去怎样的ObjectID生成和怎么样猜测。 为了解释,第一,在这里阅读规格:
对象ID规格
那么,让我们一块把它分解件:
为了扩大对源位。 的ObjectID可由以下产生:
因此,有事情可以做,以使他们更难个别猜测,但没有大量的深谋远虑和保障,对于一个正常的数据集,有效的ObjectID的范围应该是相当容易的工作了,因为它们都带有前缀时间戳(除非你以某种方式操纵这一点)。
蒙戈的ObjectID从来没有打算从蛮力攻击保护(或任何攻击,对于这个问题)。 他们只是提供全球唯一性。 你不应该假定一些对象不能被用户访问,因为该用户不应该知道其ID。
为了您的资源的实际保护,地使用其他技术。
如果你抵御未经授权的访问,将一些授权逻辑在您的应用程序(允许访问的合法用户,拒绝其他人)。
如果你想阻止倾倒的所有对象,使用某种类型的速率限制。 与授权(如果适用)相结合。
可选阅读: 埃里克利珀上的GUID 。