我想知道发布文档的_id
是否安全。
我正在使用分析软件来跟踪用户的行为,我需要在客户端上访问_id
以获得更好的上下文。但是,令我感到困惑的是,我正在发布文档的内部信息。
总而言之,作为mongo和Meteor的新手,我想确定这是否安全。有什么建议吗?
答案 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字节的计数器,以随机值开始。
这里有一些小问题:
ObjectId
(如果您通过ID启用任何形式的访问) ,这似乎是可能的,因为您希望客户知道_id
)。这些都是宏观方案中相当小的泄漏,尽管我通常倾向于尽可能避免不必要的信息泄漏。考虑使用非默认的_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个字节,由
有可能使用_id
找出有关数据库的文档和集合的所有详细信息。
注意:公开_id根本不安全。
假设您正在使用_id
用于某些套接字侦听器或发射器,任何人都可以使用该特定公开的_id
猜测其他_id
并发出一些恶意数据。
当您公开_id
时,它包含时间戳,因此您将公开创建该特定数据的时间。