如果我在网址中放入一个bson ID,我会暴露敏感数据吗?

时间:2012-12-05 17:39:19

标签: mongodb url bson

假设我的Mongodb中有一个Products数组。我希望用户能够在自己的页面上看到每个产品:http://www.mysite.com/product/12345/Widget-Wodget。由于每个产品没有增量整数ID(12345),而是具有BSON ID(5063a36bdeb13f7505000630),我需要添加整数ID或使用BSON ID。

由于BSON ID包括PID:

  • 4字节时间戳,
  • 3字节机器标识符,
  • 2字节进程ID,
  • 3字节计数器。

如果我在网址中使用BSON ID,我是否会向外界公开安全信息?

3 个答案:

答案 0 :(得分:15)

我无法想到在您的计算机上获得权限的任何用途,但是在任何地方使用ObjectIds都会泄露许多信息。

通过抓取您的网站,可以:

  • 找到一些隐藏的对象:例如,如果计数器部分在时间t1和t2之间从0x .... b1到0x ... b9,可以猜测这些invervals中的ObjectIds。但是,如果您强制执行访问权限,猜测ID很可能无用
  • 知道每个用户的注册日期(不是非常敏感的信息,但总比没有好)
  • 从员工创建的对象的时间戳中推断出实际(而不是公开的)营业时间
  • 从用户生成的对象的时间戳中推断出您的受众生活在哪个时区:如果您的网站是人们主要在午餐时间使用的网站,则可以测量ObjectIds的峰值,并推断出下午8点的峰值意味着观众在美国西海岸
  • ,更一般地说,通过抓取您网站的大部分内容,您可以建立服务成功的时间表,在任何给定时间内了解:您的用户数量,用户参与度,您拥有的服务器数量,您的服务器重启的频率。周末发生的PID更改更可能发生崩溃,而工作日发生的更改更可能是崩溃+软件修订
  • 并且可能会找到特定于您的业务流程和域的其他信息

公平地说,即使使用随机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是另一项公开无用的数据,说实话,他们可以使用pingdigg比通过计算机ID更好地了解您的网络单独

所以回答这个问题:不,没有真正的安全威胁,除了MongoDB之外,你所显示的信息对任何人都没有用。

我同意@Stennie使用SEO友好网址,我通常用于电子商务的一个例子是/product/product_title_,随机ID较小(可能是基数64编码_id)或者最后用.html自动递增ID。