如果将api调用绑定到对象的id,是否可以简单地强制这个api来获取所有对象?如果你想到MySQL,这将是完全可能的增量整数ID。但是MongoDB呢? ids是可以猜测的吗?例如,如果你知道一个id,猜测其他(next,previous)id是否容易?MongoDB ID可以猜测吗?
谢谢!
如果将api调用绑定到对象的id,是否可以简单地强制这个api来获取所有对象?如果你想到MySQL,这将是完全可能的增量整数ID。但是MongoDB呢? ids是可以猜测的吗?例如,如果你知道一个id,猜测其他(next,previous)id是否容易?MongoDB ID可以猜测吗?
谢谢!
+1对于塞尔吉奥的回答,在回答他们是否可以猜到的时候,他们不是散列,他们是可以预测的,所以他们可以在给予足够时间的情况下“被迫”。可能性取决于如何生成ObjectID以及如何猜测。为了解释,第一,在这里阅读规格:
http://www.mongodb.org/display/DOCS/Object+IDs#ObjectIDs-BSONObjectIDSpecification
那么让我们一块把它分解一块:
要展开位在来源。的ObjectID可以由产生:
因此,有事情可以做,以使它们更难个别猜测,但没有大量的深谋远虑和保障,对于一个正常的数据集,有效的ObjectID的范围应该是相当容易解决,因为它们都带有时间戳前缀(除非你以某种方式操纵它)。
Mongo的ObjectId从来都不是为了防止暴力攻击(或任何攻击)。他们只是提供全球独一无二的。你应该而不是假设某个对象不能被用户访问,因为这个用户不应该知道它的ID。
为了实际保护您的资源,请使用其他技术。
如果您防御未经授权的访问,请在您的应用中放置一些授权逻辑(允许访问合法用户,否认其他人)。
如果您想阻止倾倒所有对象,请使用某种速率限制。如果适用,与授权结合使用。
可选阅读:Eric Lippert on GUIDs。