【发布时间】:2015-12-30 12:12:15
【问题描述】:
我刚刚设置了 MongoDB,也获得了 mongoose,当我按照一些连接到数据库的教程时,我注意到默认情况下不需要用户/密码,这导致我进入以下问题:
转移到生产时这是一个安全问题吗?我需要采取哪些安全措施?任何人都可以远程访问 MongoDB 吗?如果是这样,如何抑制它。
【问题讨论】:
我刚刚设置了 MongoDB,也获得了 mongoose,当我按照一些连接到数据库的教程时,我注意到默认情况下不需要用户/密码,这导致我进入以下问题:
转移到生产时这是一个安全问题吗?我需要采取哪些安全措施?任何人都可以远程访问 MongoDB 吗?如果是这样,如何抑制它。
【问题讨论】:
确实,您偶然发现了一个有效的问题。
你看看这个来源:
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();
});
});
});
只需添加一些您可能想查看的来源:
希望这是您寻求生产 MongoDB 的良好起点!
【讨论】:
是的,如果可以从 Internet 访问(即没有防火墙、密码弱/无密码或仅绑定到本地主机),则会出现问题。攻击者可能很容易访问您的数据库并读取所有数据。这不仅仅是理论上的威胁,请参阅 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(如果其他用户也可以访问该机器,也会有问题)以防止暴力攻击。
【讨论】:
安全性应该是一个多层次的方法。
27017 上的 MongoDB 流量才能从网络服务器访问 MongoDB 机器。ssh 从需要访问它们的特定 IP 地址访问 MongoDB 机器或网络服务器。27017,任何入侵网络服务器的人都可以从源代码中提取 MongoDB 密码服务器。简而言之,不,您不需要身份验证,但它可以增加额外的安全层。其他层要重要得多。
【讨论】: