2016-08-04 106 views
0

什么是存储和使用敏感配置信息(如连接字符串)的最佳方式。我曾经将它们存储在app.config,web.config中,现在以config.json作为纯文本存储。这是不安全的,特别是在将这些文件检入公共可用的源代码控制时。什么是最安全的方式来存储这种类型的数据,并在应用程序内使用?安全存储敏感配置数据,如连接字符串

+0

1. app.config和web.config允许在连接字符串上进行加密。 2.不要检查敏感信息到源代码控制中,那不是源代码控制的目的。 3.不确定你的意思是“某种设备的个人密钥” - 这太模糊,无法回答,因为这可能是任何事情。 – Igor

+0

某些设备的个人密钥==任何东西都是敏感的 – lucas

+0

这仍然很模糊。这可能是用户特定的,它可能是一些静态(中央设备),如数据存储,也许有很多,也许只有一个关键。问题在继续。还有什么/谁读了那个“钥匙”?一个用户,任何执行代码? – Igor

回答

1

经过几次尝试之后,我发现的最佳解决方案是在Windows系统上使用环境变量。不确定一旦我部署到Azure后,这种方式将如何工作,但现在它按预期工作。在我的ASP.NET核心在Startup.cs我添加AddEnvironmentVariables:

public Startup(IHostingEnvironment appEnv) 
    { 
     var builder = new ConfigurationBuilder() 
      .SetBasePath(appEnv.ContentRootPath) 
      .AddJsonFile("config.json") 
      .AddEnvironmentVariables(); 


     Configuration = builder.Build(); 
    } 

这里是连接字符串:

enter image description here

来使用它:

string connStr= Startup.Configuration["Data:WorldContextConnection"]; 

在这种我可以检查每个文件到GitHub中,唯一的情况是我需要总是将这些环境变量添加到我将要处理的系统中。

+1

我会使用命令行变量,然后只是在需要的值中启动可执行文件传递。这种方法在启动Azure服务时也更加出色。 –

+0

我喜欢你的建议,是的,这是另一个非常好的和安全的选项,不知道它可以与Azure实现,将尝试一定,谢谢 – lucas

1

特别是在将这些文件检查为公开可用的源代码管理时。

不这样做。

这就是正好把你的秘密设置放在配置文件中,因为你不想与世界分享它们。把它们放在机器上的文件上是完全正确的 - 人们会期望使用你的软件的人已经将他们的机器固定在某个点上。

如果你不能信任你的用户,那么你需要存储机器上的配置,给用户一个访问令牌(比如用户名和密码,或使用OAuth凭证),他们可以用它来说话给你,然后你保持配置安全和秘密。

+0

同意,我仍然想检查配置文件,因为我保留了一些其他可以暴露给公众的设置,但是在其他地方还有那些非常敏感的数据,例如conn字符串。我设法实现了我之前使用环境变量的方式。感谢您的回应 – lucas

+0

您*可*总是提供一种方法来创建默认配置文件。 –

相关问题