繁体   English   中英

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

[英]ASP.Net core how to secure connection string sensitive data in non Azure hosting

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

有一个 Azure KeyVault 的模拟,它免费和开源。你可以在那里存储你的连接字符串和其他敏感数据。还有.net 的客户端库

您的主要选择是:

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

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

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

环境变量是 Azure Key Vault 之外最常用的变量。 虽然未加密,但它们存储在服务器上(在您的项目之外),并且只有在该服务器上具有足够权限的用户才能看到。 如果恶意行为者能够访问具有查看环境变量权限的帐户,则可以说您已经遇到了比暴露数据库凭据更糟糕的问题。

如果您的应用程序没有看到环境变量,则需要查看两件事:

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

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

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

这也将帮助您隔离各种平台

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM