安全存储敏感的配置数据,例如连接字符串
Secure storing sensitive config data such as connection string
存储和使用连接字符串等敏感配置信息的最佳方式是什么。我曾经将它们存储在 app.config、web.config 中,现在以纯文本形式存储在 config.json 中。这是不安全的,尤其是在将这些文件签入公开可用的源代码管理时。存储此类数据并在应用程序中使用的最安全方法是什么?
especially when checking those files into publicly available source control.
不要那样做。
正是将您的秘密设置放入配置文件的意义所在,因为您不想与全世界分享它们。将它们放在机器上的文件中是完全可以的 - 人们会期望使用您的软件的人已经将他们的机器保护到某一点。
如果您不能信任您的用户,那么您需要将配置存储在您的机器上,并为您的用户提供访问令牌(比如用户名和密码,或者OAuth 令牌),他们可以用来与您交谈,然后您将配置安全保密。
在尝试了一些方法之后,我找到的最佳解决方案是在 Windows 系统上使用环境变量。不确定部署到 Azure 后它会如何工作,但目前它按预期工作。在我的 ASP.NET Core 中 Startup.cs 我添加 AddEnvironmentVariables:
public Startup(IHostingEnvironment appEnv)
{
var builder = new ConfigurationBuilder()
.SetBasePath(appEnv.ContentRootPath)
.AddJsonFile("config.json")
.AddEnvironmentVariables();
Configuration = builder.Build();
}
这是连接字符串:
消费它:
string connStr= Startup.Configuration["Data:WorldContextConnection"];
在那种情况下,我可以将每个文件检查到 GitHub,唯一的问题是我需要始终将这些环境变量添加到我将要处理的系统中。
存储和使用连接字符串等敏感配置信息的最佳方式是什么。我曾经将它们存储在 app.config、web.config 中,现在以纯文本形式存储在 config.json 中。这是不安全的,尤其是在将这些文件签入公开可用的源代码管理时。存储此类数据并在应用程序中使用的最安全方法是什么?
especially when checking those files into publicly available source control.
不要那样做。
正是将您的秘密设置放入配置文件的意义所在,因为您不想与全世界分享它们。将它们放在机器上的文件中是完全可以的 - 人们会期望使用您的软件的人已经将他们的机器保护到某一点。
如果您不能信任您的用户,那么您需要将配置存储在您的机器上,并为您的用户提供访问令牌(比如用户名和密码,或者OAuth 令牌),他们可以用来与您交谈,然后您将配置安全保密。
在尝试了一些方法之后,我找到的最佳解决方案是在 Windows 系统上使用环境变量。不确定部署到 Azure 后它会如何工作,但目前它按预期工作。在我的 ASP.NET Core 中 Startup.cs 我添加 AddEnvironmentVariables:
public Startup(IHostingEnvironment appEnv)
{
var builder = new ConfigurationBuilder()
.SetBasePath(appEnv.ContentRootPath)
.AddJsonFile("config.json")
.AddEnvironmentVariables();
Configuration = builder.Build();
}
这是连接字符串:
消费它:
string connStr= Startup.Configuration["Data:WorldContextConnection"];
在那种情况下,我可以将每个文件检查到 GitHub,唯一的问题是我需要始终将这些环境变量添加到我将要处理的系统中。