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

jco*_*lum 11 url mongodb 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,我是否会向外界公开安全信息?

gui*_*ume 15

我想不出在你的机器上获得特权的任何用途,但是在任何地方使用ObjectIds都会泄露很多信息.

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

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

公平地说,即使使用随机ID,也可以推断很多.主要问题是您需要阻止任何人抓取您网站中具有统计意义的重要部分.但如果某人有决心,他们最终会成功,这就是为什么向他们提供所有这些额外的,带时间戳的信息似乎是错误的.

  • 我不了解隐藏的对象,也可以通过查看您可以联系公司的时间来推断营业时间,大多数公司应该在他们的网站上自由地显示营业时间.ID是服务器端的,因此它们是服务器时间,而不是客户端时间.他们如何根据您的BSON ID建立时间表?没有办法预测id告诉数据库或服务器的整体情况.他们怎么能告诉你重新启动了多少次而不查询每个id甚至已删除的id? (2认同)