我刚刚设置了MongoDB,也抓住了mongoose
,当我按照一些连接到数据库的教程时,我注意到默认情况下不需要用户/密码导致我对于以下问题:
迁移到生产时这是一个安全问题吗?我需要采取哪些安全措施?有人能够远程访问MongoDB吗?如果是这样如何压制。
答案 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 :(得分: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)
安全应该是一种多层次的方法。
27017
上的MongoDB流量才能从网络服务器访问MongoDB计算机。ssh
访问MongoDB计算机或来自需要访问它们的特定IP地址的Web服务器。27017
,并且任何破坏了Web服务器的人都能够从源代码中提取MongoDB密码服务器上的代码。简而言之,不,您不需要身份验证,但它可以添加额外的安全层。其他层更为重要。