我应该使用MongoDB auth支持还是仅仅依靠更具体的应用程序方法?

时间:2013-06-14 01:11:02

标签: node.js security mongodb passwords

Node的新手,Mongo的新用户。等等...

我很想开始使用这两种技术的项目,但其中一个问题是安全性。对Node来说似乎更可怕,因为服务器逻辑非常接近应用程序,MongoDB开启了开放式防洪门。

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

因此,如果我将MongoDB实例限制为仅接受通过localhost的连接,我是否会将身份验证留给我自己的应用程序业务逻辑?或者我应该开枪,在system.users中为每个想要在我的网站“创建帐户”的tom-dick-and-harry创建MongoDB文档?

有中间立场吗?

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

1 个答案:

答案 0 :(得分:2)

  

我是否正确地认为MongoDB本机的唯一真正用途   事件中是身份验证支持(即system.users数据库)   需要从服务器外部屏蔽外部连接?

是的,基本上。

  

我应该开枪,在system.users中创建MongoDB文档   对于想要用我的“创建帐户”的每个tom-dick-and-harry   网站?

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

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

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

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

总结:

  • 无需身份验证的环回:确定
  • 使用1个应用程序用户进行环回:确定
  • 未经身份验证的公共IP:FAIL
  • 具有身份验证但没有SSL的公共IP:FAIL
  • 使用身份验证和SSL的公共IP:确定

在mongo,use bcrypt中存储最终用户密码哈希值。这是广泛记录的,所以我不打算在这里为你重现。