MongoDB:公开使用文档ID是否安全?
我真的很喜欢MongoDB的自动生成的ID。 他们真的很有用。
但是,公开使用它是否存在?
假设有一个post集合,并且/ posts页面需要id参数(类似/ posts / 4d901acd8df94c1fe600009b)并且显示关于它的信息。
这样用户/黑客就会知道文档的真实对象ID。 是好还是不安全?
谢谢
在这里 ,自动生成的ID包括一个3字节的机器ID(可能是MAC地址的散列)。 有人可以通过比较这三个字节在不同的id中找出你的内部networking是不可思议的,但是除非你为五angular大楼工作,这似乎不值得担心(你很可能容易受到像一个错误configuration的Apache更无聊的东西)。
除此之外,Epcylon的权利; 关于通过URL公开ID不存在固有的不安全性。 当然, 丑陋是另一回事。 你可以根据它们来缩短它们(我一直在想这个),但是有一个奇怪的事实,它们大约相同。
我在生产环境中对MongoDB没有经验,所以不要把我的答案当成事实,但我无法想象它为什么不安全。
比较RDBMS中的Auto-IDtypes列。 你一直暴露在外面,我不知道有什么理由不对MongoDB ID做同样的事情。
与往常一样,安全性应该是validation您的input,而不是在没有适当保护的情况下让您的数据库附近的任何人。 如果他们知道如何select数据库中的特定对象,那么这样做应该没有问题,因为他们仍然无法做任何事情。
我以为mongodb _id是基于一个date戳,切断地址和其他你可能更喜欢保密的东西。
如果您担心可能需要对mongoids进行encryption并将结果用作客户端标识符(然后在请求返回时解除encryption)。
如果encryption密钥部分地基于用户或会话的某个唯一属性,则这使得用户在不应该访问内容时很难。
显然仍然重要的是通过其他方式validation用户!
也许可以把这个看成是隐私而不是安全问题。
我面对完全相同的问题。 在将用户贡献的内容存储在基于Mongo生成的ID的可访问的目录中时,如果这些ID可预测到一个用户可以访问另一个用户的内容,则存在风险。
我认为其他人的build议是正确的路线:了解用户特定私人内容的URL 不应该足以访问它 。 尝试访问应该检查匹配的用户是否提出请求。
我打算在Symfony2中这样做,将用户内容存储在Web根目录之外,然后允许通过新的路由/控制器访问它,在传递响应之前将会validation用户的一些标识信息。
从MySql中使用自动递增ID的值不再是不安全的。 这不是一个安全漏洞。
-
如果编号链接到“不公开”的内容,只需要链接 – 这是隐私问题。
-
如果id给出了用户login下的内容的链接 – 不是问题。
无论是MongoDb,SQL还是其他任何ID。 Id是数据的关键。 如果这个键只是你需要查看的内容,你不应该 – 这是一个问题。 对于这种情况 – 生成不可猜测的ID。