假设我的Mongodb中有一个Products数组。我希望用户能够在自己的页面上看到每个产品:http://www.mysite.com/product/12345/Widget-Wodget
。由于每个产品没有增量整数ID(12345),而是具有BSON ID(5063a36bdeb13f7505000630),我需要添加整数ID或使用BSON ID。
由于BSON ID包括PID:
如果我在网址中使用BSON ID,我是否会向外界公开安全信息?
答案 0 :(得分:15)
我无法想到在您的计算机上获得权限的任何用途,但是在任何地方使用ObjectIds都会泄露许多信息。
通过抓取您的网站,可以:
公平地说,即使使用随机ID,也可以推断很多。主要问题是您需要阻止任何人抓取您网站中具有统计意义的重要部分。但是,如果某人有决心,他们最终会成功,这就是为什么向他们提供所有这些额外的,带时间戳的信息似乎是错误的。
答案 1 :(得分:2)
共享ObjectID中的信息不会影响您的安全性。有人可以推断出一些细微的细节,例如创建ObjectID的时间(时间戳),但是ObjectID组件都不应该与身份验证或授权相关联。
如果您正在构建电子商务网站,SEO通常是公共URL的重要考虑因素。在这种情况下,您通常希望使用比ObjectID更短且语义更多的语义路径组件的友好URL。
请注意,您不必使用_id
字段的默认ObjectID ..因此,始终可以生成与您的应用程序更相关的内容。默认的ObjectID确实提供了唯一性的合理保证,因此如果您实施自己的_id
分配,则必须考虑这一点。
另见:
答案 2 :(得分:2)
正如@Stennie所说,不是真的。
让我们从pid开始,大多数黑客都不会费心去寻找一个pid,比如Linux,而不是他们会这样做:
ps aux | grep mongod
或类似的东西。当然,这需要黑客实际入侵你的服务器,我知道没有基于pid的公共黑客攻击。考虑到当您重新启动计算机或mongod
时pid会发生变化,这些信息对于任何想要侦察间谍的人来说都是无用的。
计算机ID是另一项公开无用的数据,说实话,他们可以使用ping
或digg
比通过计算机ID更好地了解您的网络单独
所以回答这个问题:不,没有真正的安全威胁,除了MongoDB之外,你所显示的信息对任何人都没有用。
我同意@Stennie使用SEO友好网址,我通常用于电子商务的一个例子是/product/product_title_
,随机ID较小(可能是基数64编码_id
)或者最后用.html
自动递增ID。