我正在使用mongodb构建一个小型Web应用程序,并且只是想在公共网站上公开显示mongoIds是一种好习惯。
现在我正在为用户个人资料使用以下网址结构:http://example.com/user/MONGOID
这是否有任何安全漏洞或以其他方式阻止?
答案 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。但使用它不会破坏你的项目。
要防止出现安全漏洞,您必须:
使用_id
它还会将您的公共网址绑定到后端。如果更改数据库技术,则需要进行一些转换。或者,您可能需要运行一些更改,这些更改将导致对象被销毁并再次创建,但使用不同的_id
,例如合并数据库或其他内容。您不希望您的网址因此而改变。
另一件事是_id
没有良好的空间分布。它不是一个很好的分片键。从时间戳得出,所有_id
都是紧密相连的,如果你愿意则是线性的。它们倾向于使用相同的碎片(Mongo会在以后传播它们,但是you want a key that has high cardinality)。
所以我现在更愿意付费,并从一开始就使用应用程序专用的id字段。如果需要,您可以将其存储在_id
字段中,但请考虑在文档中添加其他密钥,对其编制索引,然后在网址中使用该密钥。