1

我正在使用 mongodb 构建一个小型 Web 应用程序,只是想如果公开显示 mongoIds 是否是一种好习惯,例如在 urls 中。

现在我为用户配置文件使用以下 url 结构:http ://example.com/user/MONGOID

这是否有任何安全漏洞,还是以其他方式不鼓励?

4

2 回答 2

2

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

在 URL 中使用 ID 通常是个坏主意。根据 OWASP,它在 10 大网络安全漏洞列表中排名第 4。但是使用它不会破坏你的项目。

为了防止安全漏洞,您必须:

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

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

另一件事是_id没有良好的空间分布。它不是一个好的分片键。从时间戳派生而来_id,如果你愿意的话,所有这些都是紧密的,线性的。它们往往会进入同一个分片(Mongo 稍后会传播它们,但您需要一个具有高基数的密钥)。

所以我更喜欢现在付款,并从一开始就使用应用程序私有的 id 字段。如果需要,您可以将其存储在_id字段中,但请考虑在文档中添加另一个键,将其编入索引,然后在您的 URL 中使用它。

于 2013-08-13T02:13:34.417 回答
2

不,它没有安全隐患。

人们所能做的就是猜测某个用户的 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是资源的创造者。

于 2013-08-13T01:35:29.160 回答