我在config \ adapters.js中有一个数据库连接字符串,如下所示。我不想以纯文本形式保留连接字符串。保护该信息以及服务可以调用和连接到数据库的最佳方法是什么?
module.exports.adapters = {
// If you leave the adapter config unspecified
// in a model definition, 'default' will be used.
'default': 'mssql',
mssql: {
connectionString: 'Driver={SQL Server Native Client 10.0};Server=foo.domain.com;Database=RODDY;Uid=jsmith;Pwd=nw0ow21',
module: 'sails-mssql'
}
};
答案 0 :(得分:6)
所有其他答案都是很好的答案,这是另一种方法。
设置一个名为SQL_STRING ..
的环境变量这假设您使用的是ubuntu ..
#edit /etc/profile or ~/.profile
vim /etc/profile;
#add this line to it.
export SQL_STRING=<insert your sql string>
现在在config/local.js
文件中为connectionString:
connectionString: process.env.SQL_STRING
这将加载连接字符串作为环境变量。这将做两件事,
如果需要,您现在可以将local.js
提交到您的仓库,无论您在何处部署应用程序,它都会继承env
变量设置的任何内容。这对于开发环境等很有用。
从应用程序文件中删除安全数据,因此没有人可以查看它们,他们必须进行一些挖掘以获取实际数据。
我目前在sailsjs应用程序的生产中执行此操作,我有一个特殊的sails
用户,其~/.profile
的所有MAILGUN,db和其他凭据数据被定义为环境变量。此用户受限于sudo,ssh访问,并被锁定以只能访问一个或两个文件夹。
实际上,唯一可以看到这些环境变量的人是root用户和该用户。
答案 1 :(得分:2)
隐藏连接凭据的问题在于,您的应用需要访问权限才能与数据库进行通信,并最终需要以明文形式访问它。 Web应用程序开发人员已达成共识,可以将其存储在您的filesytsem中。如果攻击者可以访问您的文件系统,则您的系统已经严重受损。
作为一个网络应用程序,由于其暴露于世界,它本身就存在攻击的风险。您可以遵循安全,注重安全的做法来帮助管理风险:
这个清单并非详尽无遗,你可以做更多的事情,但这是一个很好的起点。
答案 2 :(得分:0)
如果您想要的是从版本控制中隐藏适配器连接凭据,
sails.js允许您在config/local.js
中定义适配器配置,默认情况下,它会添加到.gitignore中,因此不会检入git [1]。查看sails.js部署指南,了解有关使用local.js [2]的更多信息。如部署指南所示,您可以使用local.js,如下所示:
// Local configuration
//
// Included in the .gitignore by default,
// this is where you include configuration overrides for your local system
// or for a production deployment.
//
// For example, to use port 80 on the local machine, override the `port` config
module.exports = {
port: 80,
environment: 'production',
adapters: {
mssql: {
connectionString: 'Driver={SQL Server Native Client 10.0};Server=foo.domain.com;Database=RODDY;Uid=jsmith;Pwd=nw0ow21'
}
}
}
但这并不会阻止有权访问您服务器的人获取对此信息的访问权限。如果您对此感到担心,那么@SamT给出的建议很有用。