我正在使用 mongodb 构建一个小型 Web 应用程序,只是想如果公开显示 mongoIds 是否是一种好习惯,例如在 urls 中。
现在我为用户配置文件使用以下 url 结构:http ://example.com/user/MONGOID
这是否有任何安全漏洞,还是以其他方式不鼓励?
我正在使用 mongodb 构建一个小型 Web 应用程序,只是想如果公开显示 mongoIds 是否是一种好习惯,例如在 urls 中。
现在我为用户配置文件使用以下 url 结构:http ://example.com/user/MONGOID
这是否有任何安全漏洞,还是以其他方式不鼓励?
答案取决于很多事情......
在 URL 中使用 ID 通常是个坏主意。根据 OWASP,它在 10 大网络安全漏洞列表中排名第 4。但是使用它不会破坏你的项目。
为了防止安全漏洞,您必须:
使用_id
它还将您的公共 URL 绑定到后端。如果您更改数据库技术,您将需要进行一些转换。或者,您可能需要运行一些更改,这些更改将导致对象被销毁并再次创建,但使用不同的_id
,例如合并数据库或其他东西。您不希望您的网址因此而改变。
另一件事是_id
没有良好的空间分布。它不是一个好的分片键。从时间戳派生而来_id
,如果你愿意的话,所有这些都是紧密的,线性的。它们往往会进入同一个分片(Mongo 稍后会传播它们,但您需要一个具有高基数的密钥)。
所以我更喜欢现在付款,并从一开始就使用应用程序私有的 id 字段。如果需要,您可以将其存储在_id
字段中,但请考虑在文档中添加另一个键,将其编入索引,然后在您的 URL 中使用它。
不,它没有安全隐患。
人们所能做的就是猜测某个用户的 Id 或尝试通过所有 Id 来获取系统的所有用户。
以stackoverflow为例。他们和你有同样的模式:http://stackoverflow.com/users/352959
这是 352959 是你,没有什么不好的。唯一每当您在浏览器中输入此内容时,您将被重定向到 http://stackoverflow.com/users/352959/king-julien
.
我可以尝试遍历这些数字,然后下一个是http://stackoverflow.com/users/352960
,但我只能找到这是一些 john。当然http://stackoverflow.com/users/1
是资源的创造者。