是否公开显示MongoId?

时间:2013-08-12 19:44:45

标签: mongodb

我正在使用mongodb构建一个小型Web应用程序,并且只是想在公共网站上公开显示mongoIds是一种好习惯。

现在我正在为用户个人资料使用以下网址结构:http://example.com/user/MONGOID

这是否有任何安全漏洞或以其他方式阻止?

2 个答案:

答案 0 :(得分:2)

不,它没有安全隐患。

所有人都可以做的是猜测某个用户的ID或尝试通过所有ID来获取系统的所有用户。

以stackoverflow为例。它们与你具有相同的模式:http://stackoverflow.com/users/352959这是352959是你,并没有什么不好的。只要您在浏览器中输入此内容,您就会被重定向到http://stackoverflow.com/users/352959/king-julien

我可以尝试迭代这些数字而下一个人是http://stackoverflow.com/users/352960,但我能找到的只是一些约翰。当然http://stackoverflow.com/users/1是资源的创造者。

答案 1 :(得分:2)

答案取决于许多事情......

在URL中使用ID通常是个坏主意。 According to OWASP, it ranks #4 in the top 10 web security vulnerabitiy list。但使用它不会破坏你的项目。

要防止出现安全漏洞,您必须:

  • 仅对公开的数据(如StackOverflow配置文件)
  • 使用它
  • 让一些代码拦截请求并验证用户是否有权查看资源(个人资料,页面,文档等)

使用_id它还会将您的公共网址绑定到后端。如果更改数据库技术,则需要进行一些转换。或者,您可能需要运行一些更改,这些更改将导致对象被销毁并再次创建,但使用不同的_id,例如合并数据库或其他内容。您不希望您的网址因此而改变。

另一件事是_id没有良好的空间分布。它不是一个很好的分片键。从时间戳得出,所有_id都是紧密相连的,如果你愿意则是线性的。它们倾向于使用相同的碎片(Mongo会在以后传播它们,但是you want a key that has high cardinality)。

所以我现在更愿意付费,并从一开始就使用应用程序专用的id字段。如果需要,您可以将其存储在_id字段中,但请考虑在文档中添加其他密钥,对其编制索引,然后在网址中使用该密钥。