我是否需要为MongoDB启用身份验证?

时间:2015-12-30 12:12:16

标签: node.js mongodb mongoose

我刚刚设置了MongoDB,也抓住了mongoose,当我按照一些连接到数据库的教程时,我注意到默认情况下不需要用户/密码导致我对于以下问题:

迁移到生产时这是一个安全问题吗?我需要采取哪些安全措施?有人能够远程访问MongoDB吗?如果是这样如何压制。

3 个答案:

答案 0 :(得分:4)

事实上,你偶然发现了一个有效的问题。

您查看此来源:

http://mongodb.github.io/node-mongodb-native/contents.html

并且有一个代码可以执行此类操作:

var Db = require('mongodb').Db,
    MongoClient = require('mongodb').MongoClient,
    BSON = require('mongodb').pure().BSON,
    assert = require('assert');

var db = new Db('integration_tests', new Server("127.0.0.1", 27017,
 {auto_reconnect: false, poolSize: 4}), {w:0, native_parser: false});

// Establish connection to db
db.open(function(err, db) {
  assert.equal(null, err);

  // Add a user to the database
  db.addUser('user', 'name', function(err, result) {
    assert.equal(null, err);

    // Authenticate
    db.authenticate('user', 'name', function(err, result) {
      assert.equal(true, result);

      db.close();
    });
  });
});

只需添加一些您可能想要查看的来源:

  1. https://docs.mongodb.org/v3.0/administration/security-checklist/
  2. https://docs.mongodb.org/manual/administration/security/
  3. 希望这是您寻求生产MongoDB的良好起点!

答案 1 :(得分:3)

是的,如果可以从互联网访问(即,没有防火墙,有弱/没有密码,或者没有绑定到localhost),则会出现问题。攻击者可能很容易访问您的数据库并读取所有数据。这不仅仅是一个理论上的威胁,请参阅http://www.cso.com.au/article/566040/students-find-40k-unprotected-mongodb-databases-8-million-telco-customer-records-exposed/最近的“指责”。

mongodb开发者提供security checklist并提供security tutorial

所以,至少设置一个password,最多只设置bind it to localhost(如果其他用户也可以访问该计算机,也会有问题),以防止暴力攻击。

答案 2 :(得分:2)

安全应该是一种多层次的方法。

  • 首先,在制作中,我建议将MongoDB放在一个单独的物理机器上。
  • 我会通过防火墙限制对此计算机的访问,这样只有端口27017上的MongoDB流量才能从网络服务器访问MongoDB计算机。
  • 我只允许ssh访问MongoDB计算机或来自需要访问它们的特定IP地址的Web服务器。
  • 我只对Web服务器和MongoDB机器使用基于密钥的身份验证。
  • 我会完全阻止MongoDB机器访问互联网,除了NTP以进行时间同步。
  • 虽然我觉得上面的步骤更重要,但我会启用MongoDB身份验证。
    • 这是一个薄弱的安全层,因为只有Web服务器应该能够访问MongoDB机器上的端口27017,并且任何破坏了Web服务器的人都能够从源代码中提取MongoDB密码服务器上的代码。
    • 如果您有多个MongoDB数据库,则可以为每个数据库使用不同的身份验证凭据,以在应用程序之间添加一定程度的隔离。

简而言之,不,您不需要身份验证,但它可以添加额外的安全层。其他层更为重要。

相关问题