0

Node 新手,Mongo 新手。等等等等...

我很想开始使用这两种技术的项目,但其中一个问题是安全性。使用 Node 似乎更可怕,因为服务器逻辑非常接近应用程序,而 MongoDB 的闸门开箱即用。

我的问题是,我是否正确地假设 MongoDB 的本机身份验证支持(即 system.users 数据库)的唯一真正用途是在需要屏蔽来自服务器外部的外部连接的情况下?

那么,如果我将 MongoDB 实例限制为仅接受通过 localhost 的连接,我是否会将身份验证留给我自己的应用程序业务逻辑?还是我应该大发雷霆,在 system.users 中为每个想要在我的网站“创建帐户”的汤姆迪克和哈利创建 MongoDB 文档?

有中间立场吗?

对于额外的荣誉,一些关于 MongoDB 中密码存储最佳实践的提示会很有用......

4

1 回答 1

2

我是否正确假设 MongoDB 的本机身份验证支持(即 system.users 数据库)的唯一真正用途是在需要筛选来自服务器外部的外部连接的情况下?

是的,基本上。

我是否应该在 system.users 中为每个想要在我的网站“创建帐户”的汤姆迪克和哈利创建 MongoDB 文档?

所以数据库应用程序几乎从不给每个最终用户一个数据库帐户,这是有充分理由的。最终用户不需要也不需要完整的数据库帐户。这就是为什么你有一个应用程序 - 为用户提供定制的功能。此外,通常您希望支持大量活跃的最终用户,但您只需要少量活跃的数据库连接。最后,几乎每个应用程序都有复杂的授权逻辑来控制哪些用户可以读取或写入数据库本身无法强制执行的哪些数据位。所以通常你可以:

A)让mongo绑定到环回并接受匿名连接

或者

B)创建一个代表整个应用程序的 mongo 用户,并使用这些凭据对从应用程序服务器到数据库的少量连接进行身份验证

这两种方法都很常见,老实说,A) 的部署简单性释放了一些安全思维空间,以专注于更可能的漏洞,如 XSS 等。

总结一下:

  • 没有身份验证的环回:OK
  • 与 1 个应用程序用户环回:OK
  • 未经身份验证的公共 IP:FAIL
  • 具有身份验证但没有 SSL 的公共 IP:失败
  • 具有身份验证和 SSL 的公共 IP:好的

要将最终用户密码哈希存储在 mongo 中,请使用 bcrypt。这已被广泛记录,因此我不会在这里为您复制。

于 2013-06-14T03:35:42.427 回答