ASP.Net 核心如何保护非 Azure 托管中的连接字符串敏感数据



我是 ASP.Net 核心新手,我尝试开发 ASP.Net 核心MVC Web API。 我需要连接到我的数据库。 我不知道我应该把我的连接字符串放在哪里。 我把它放在appsettings.json文件中。 但是,当我将 API 部署到非 Azure 托管时,它会公开我的数据库密码。 我尝试秘密管理器,但它似乎只是为了开发阶段,不确定我理解是否正确。 我尝试输入环境变量,但它在我的 IIS 中不起作用。 我可以知道如何在部署到非 Azure 托管时保护我的敏感数据。 我应该放在哪里?

您的主要选择是:

  • JSON (未加密(
  • 环境变量(未加密(
  • Azure Key Vault (加密(

正如您正确确定的那样,JSON 将是纯文本的,因此是不可取的,主要是因为源代码管理。不过,如果您正在开发闭源解决方案,那么这不是一个问题。一旦部署在服务器上,文件权限就可以防止细节被窥探。用户机密只是 JSON。更好的是它被排除在项目之外(因此它不会提交到源代码管理(,但它仍然以未加密的方式存储,是的,它仅用于开发。

Azure 密钥保管库是唯一允许加密的内置选项,因此是最安全的选项。无论应用是否实际托管在 Azure 中,都可以使用 Azure 密钥保管库。但是,它不是免费的(尽管它也不是很贵(。

环境变量是 Azure 密钥保管库外部最常用的变量。虽然未加密,但它们存储在服务器上(项目外部(,并且仅对该服务器上具有足够权限的用户可见。如果恶意参与者能够访问具有查看环境变量权限的帐户,则可以说您遇到的问题比公开数据库凭据要严重得多。

如果您的应用未看到环境变量,则需要考虑两点:

  1. 确保已将它们添加为系统变量,而不是用户变量。用户变量只能由添加它们时登录的用户(即您(访问,这几乎可以肯定与运行 Web 服务器的用户不同。或者,您可以登录添加 Web 服务器用户以将变量添加为用户变量。这在服务帐户下运行时很常见。它增加了一个可疑的额外安全性,因为只有一个帐户可以看到这些值,而不是任何管理员级别的帐户(较小的攻击面(。

  2. 如果使用 IIS,则必须编辑应用程序池的高级设置,并从那里启用"加载用户配置文件"。

有类似 Azure KeyVault 它免费和开源。可以将连接字符串和其他敏感数据存储在那里。还有用于 .net 的客户端库

我使用"管理 Web 机密"来保存数据库和其他开发人员和团队成员的任何其他重要数据机密

这将帮助您隔离各种平台

您可以在以下位置阅读更多信息 https://learn.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-3.1&tabs=windows

最新更新