发布文档的_id安全吗?

时间:2015-06-26 06:34:08

标签: mongodb meteor

我想知道发布文档的_id是否安全。

我正在使用分析软件来跟踪用户的行为,我需要在客户端上访问_id以获得更好的上下文。但是,令我感到困惑的是,我正在发布文档的内部信息。

总而言之,作为mongo和Meteor的新手,我想确定这是否安全。有什么建议吗?

4 个答案:

答案 0 :(得分:3)

如果使用Meteor创建文档_id,则文档_id最多是完全随机的。

除了对文档本身的引用外,它不包含任何信息。

如果您要发布该文档,则不应透露任何进一步的信息。

即使Meteor使用ObjectID(Meteor生成),时间戳和其他标识符也是随机的。时间戳组件也是随机的,如Meteor文档(http://docs.meteor.com/#/full/mongo_object_id

中所述

如果使用的_id是MongoDB外部生成的ObjectId,则Meteor外部包含时间戳和服务器详细信息等信息。但如果您的应用程序是典型的Meteor应用程序,这应该不是问题。

答案 1 :(得分:1)

如果您使用的是默认的ObjectId实施,请点击此处what you'd be exposing

  

ObjectId是一个12字节的BSON类型,使用:

构造      
      
  • 一个4字节的值,表示自Unix纪元以来的秒数,
  •   
  • 一个3字节的机器标识符,
  •   
  • 一个2字节的进程ID,
  •   
  • 一个3字节的计数器,以随机值开始。
  •   

这里有一些小问题:

  • 知道时间,机器ID,进程ID和先前的计数器让攻击者可以猜测可能用于从数据库获取其他行的其他ObjectId(如果您通过ID启用任何形式的访问) ,这似乎是可能的,因为您希望客户知道_id)。
  • 了解机器标识符可能允许攻击者识别特定的数据库服务器(仅在他们已经访问您的网络时才相关)
  • 了解PID可能允许攻击者计算出数据库服务器的正常运行时间(观察PID何时发生变化)
  • 知道时间可以为攻击者提供文档的创建时间(只有在攻击者不知道的情况下才有价值)

这些都是宏观方案中相当小的泄漏,尽管我通常倾向于尽可能避免不必要的信息泄漏。考虑使用非默认的_id列(例如,使用随机生成的值),以及您是否确实需要明文_id列可见(也许您可以使用它的加密哈希,或者您可以对其进行加密,以便客户端只能看到加密版本。)

答案 2 :(得分:1)

It's quite safe. As other answers correctly stated, yes, it may contain some bits of information about your machine and server process (depending on where the id was generated, in meteor or mongodb server)

But to leverage them for any malicious actions is a tough task. An attacker pretty much needs to get inside your network to do anything. And if he's in your network, you're screwed anyway, regardless of what ID format you expose.

By any measure, ObjectId is more resilient to guesses than a regular auto-incrementing integer ids you find in other databases. And they're exposed all the time!

Note, though, that you shouldn't rely on the fact that an id is hard to guess. Protect private pages with authorization checks, etc. So that even if an attacker correctly guesses an id of a page he shouldn't have access to, he is refused the access.

答案 3 :(得分:-1)

公开文件参考(_id不仅是数据,它是参考,主键)根本不安全。

tarckProgress是12个字节,由

组成
  1. 4字节 - 时间戳
  2. 3字节 - 机器ID
  3. 2字节 - 进程ID
  4. 3字节 - 增量计数器
  5. 有可能使用_id找出有关数据库的文档和集合的所有详细信息。

    注意:公开_id根本不安全。

    方案

    假设您正在使用_id用于某些套接字侦听器或发射器,任何人都可以使用该特定公开的_id猜测其他_id并发出一些恶意数据。

    当您公开_id时,它包含时间戳,因此您将公开创建该特定数据的时间。