Php 是否将Mongodb ObjectID用作文档ID?

Php 是否将Mongodb ObjectID用作文档ID?,php,mongodb,mongodb-php,Php,Mongodb,Mongodb Php,我想用mongoDB做一块板 我想用ObjectID分配文档ID 如果用户可以通过“4easdf123123”作为mongoDB对象ID访问文档页面 如果我在URL中使用并显示mongo ObjectID并将其用作文档id,是否存在任何可能的安全威胁 还有任何关于使用mongoDB分配文档ID的建议吗?看起来不像mongoDB ObjectID——ObjectID是12字节的二进制数据,当呈现为十六进制字符串时(通常在URL中使用它)将是24个字符长。我假设您使用的是,在这种情况下,MongoI

我想用mongoDB做一块板

我想用ObjectID分配文档ID

如果用户可以通过“4easdf123123”作为mongoDB对象ID访问文档页面

如果我在URL中使用并显示mongo ObjectID并将其用作文档id,是否存在任何可能的安全威胁


还有任何关于使用mongoDB分配文档ID的建议吗?

看起来不像mongoDB ObjectID——ObjectID是12字节的二进制数据,当呈现为十六进制字符串时(通常在URL中使用它)将是24个字符长。我假设您使用的是,在这种情况下,
MongoId
类的构造函数将忽略无效值并为您生成一个新值。无论如何,最好让驱动程序为您生成ObjectID/
MongoId
,因为这样做可以避免冲突


至于在你的URL中使用它的安全性,你应该很好。当然,您应该使用有关实现代码的常见预防措施,以确保当前用户有权查看正在显示的对象等,但在URL中使用ObjectID不会比任何其他数据库标识符(字符串、整数等)有更多的安全风险,而且通常风险更小,因为ObjectID没有语义值(而URL中类似“adminuser”的字符串可能表示该URL与具有提升权限的用户相关).

看不出有任何问题。这与在URL中使用生成的RDBMS ID相同。您可以使用:可以创建多少个唯一的MongoDB ObjectID?在海量数据中可能会冲突吗?
ObjectID
s设计为即使在没有跨应用程序协调的情况下生成,也是唯一的。它们包括时间戳、mac的哈希hine ID、进程或线程ID以及一个3字节递增计数器。您需要从同一进程/线程创建2^24个,或大约1600万个
ObjectId
s,才能产生冲突(或在机器ID上遇到哈希冲突)。即使发生了这种情况,只有当所讨论的
对象id
\u id
在同一个集合中使用(或在另一个唯一字段中)时,这才是一个问题。我决定使用“username+unix timestamp”作为用户创建的包含的消息。这对我来说似乎是合理的。