Net Core Web API 2.2 保护敏感数据

Net Core Web API 2.2 Protecting sensitive data

我正在开发 .Net Core Web API 2.2 项目并尽力保护它。此应用程序将连接到 SQL 数据库,并且将从服务器发送电子邮件,因此我想弄清楚什么是保护我的敏感数据(例如连接字符串、数据库密码甚至SMTP 帐户的电子邮件密码)。

我了解到,将密码以纯文本形式存储在文件中的某处是一种不好的做法,最佳做法之一是使用某些 Microsoft Azure 功能(您可以在其中提供一些密钥,它 returns 你是我尚未使用的实际密码)。此外,我没有任何 Azure 订阅,暂时我不想去那个方向。

你们中的一些人提出的另一种方法是将所有密码存储到环境变量,并在应用程序中简单地引用它。我目前正在探索这个选项,因为我的应用程序将托管在我无法直接访问的 'virtual windows server' 上,因此很难(没有直接访问)到达那里并设置环境变量(甚至不确定如果可能的话)。

最后,到目前为止,最好的选择(以防无法使用上述变量)是将连接和密码直接存储到 appsettings.json 文件,但对它们进行哈希处理并在 运行 时间解密。这个选项对我来说肯定是可行的;但是我想问问你们(尽管这可能很主观),这是否是一种正确的方法,或者我遗漏了一些可以帮助我更好地保护我的应用程序免受外部威胁的东西。

任何建议或建议将不胜感激,因为我现在真的不知道如何进行。

P.S。我正在使用 VSTS 存储库来存储所有应用程序代码,这可能是(我猜)人们建议在将密码存储在 appsettings.json[=27= 中时至少散列密码的原因]

appsettings.json 文件绝不能仅仅因为它受源代码控制而用于机密。仅此一点就使它成为一个糟糕的选择。但是,appsettings.json 中也没有加密任何内容的能力。我想,您可以通过其他方式加密您的秘密,并仅在事后手动将密文放入 appsettings.json 中,但是您稍后需要一些工具来解密秘密,这意味着公开您的加密方式(即您的私钥),这会破坏整个观点。长短不一,别用appsettings.json.

环境变量是一种折衷方案。由于您在服务器上手动设置它们(而不是在您的源代码管理中)并且它们只能由某些用户访问(限制访问),因此您获得了一点安全性。然而,它们也是明文存储的,这意味着如果有人能够访问服务器查看它们,所有安全性都将消失 window。环境变量也可以设置为 DevOps(以前称为 VSTS)中 CI\D 管道的一部分,因此只要执行部署的服务帐户具有必要的访问权限,直接访问服务器就不一定是先决条件。

Azure Key Vault 是推荐的方法,因为它是唯一支持加密的内置配置提供程序,这意味着您的机密在静态时被加密并且端到端非常安全。但是,除了随时可用之外,Azure Key Vault 没有什么特别之处。可以想象,您可以使用任何类型的服务来安全地存储秘密;您可能只需要编写自己的配置提供程序来定位它。