保护 web.config 设置。

5
我们正在开发一个ASP.NET MVC 5应用程序。我们雇佣了一些远程开发人员来帮助我们完成项目。
web.config文件包含连接字符串和应用程序设置,我们不想与这些远程开发人员共享这些信息。为了在我们的应用程序上工作,这些开发人员远程连接到我们控制的开发桌面。
如何最好地保护web.config中的敏感信息,以便开发人员仍然可以运行和调试应用程序,但不能读取web.config中的敏感信息?

3
最近我遇到了非常类似的情况。如果你的应用程序托管在中央服务器上,人们通过远程进行访问,你可以使用aspnet_regiis使用机器级密钥对web.config进行加密。MSDN aspnet_regiis。 值得注意的是,你仍然可以通过WebConfigurationManager调用这些值。 - Ingenioushax
谢谢,但我认为如果我们处理像保护API密钥这样的东西,那么仍然没有办法保护该密钥,因为API期望以“明文”形式传递它,所以开发人员只需要在正确的位置设置断点即可查看密钥... - user1044169
4
如果你不信任开发者,为什么雇用了他们? - Richard Ev
我认为无法完全隐藏这些信息,让开发者不能获取到。你可以非常创造性地创建一个工具库作为.dll文件供开发者使用,并尝试隐藏那些API交互? - Ingenioushax
4个回答

5

在开发环境中加密web.config是没有意义的。真正隐藏信息不让开发人员看到的唯一方法是一开始就不给他们。

  1. 您必须确保您的“远程开发环境”仅设置为访问开发数据库,并配置其他开发设置。
  2. 不要将任何敏感数据(生产密码等)提交到源代码控制中。您可以通过将信息分离到外部.config文件中来实现此目的,以便它们不会被提交到源代码控制中。TIP:忽略具有实际密码的文件并添加另一个具有相同名称和扩展名(例如.config.example)的文件,该文件已经被检入,以向开发人员提供如何在其本地系统上设置文件的说明(这是一个有用的提醒,无论是谁从源代码控制存储库的克隆中设置系统)。
  3. 使用持续集成服务器(TeamCityJenkinsOctopus Deploy等)通过环境变量将敏感信息构建到发布工作流程中。许多CI服务器都有能力从UI中隐藏敏感数据。您可以通过CI按钮单击进行自动部署,以便您的开发人员无法访问CI服务器中的敏感数据,或者将部署工件交给可信团队在生产中安装。

开发人员甚至不应该有机会查看敏感的生产数据,例如密码和私钥。


2

正如 Ingenioushax 所建议的那样,加密 web.config 部分的标准方法是使用 aspnet_regiis。 这里有一个教程


1

你是如何部署应用程序的?

如果您使用像Octopus Deploy这样的工具,只有您的岸上团队才能访问,您可以使用它来存储任何敏感设置。这些将在部署期间插入到配置文件中。

在Octopus Deploy中,这些被称为配置变量

这假设敏感设置是针对开发人员自己不使用的环境(例如生产和UAT)。


0

你可以将配置变量存储在环境变量中,并在运行时将它们读入应用程序中 - 这样做更好,因为每个开发人员和环境都可以拥有自己的配置,这些配置不会与其他人冲突。


那么,如果我将连接密码存储在环境变量中,有什么可以防止不受信任的开发人员查看该变量的方法吗?例如,在Powershell中,可以使用get-childitem env:命令。 - user1044169
这(以及其他任何相关内容)实际上都不起作用,开发人员可以进行调试、设置断点、监视等操作,他们完全掌控内存空间。 - Fredou
所以你们共用一台机器? - user156888
你可以加密字符串吗?然后将它们放入环境变量中。 - user156888

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接