【问题标题】:ASP.Net core how to secure connection string sensitive data in non Azure hostingASP.Net 核心如何保护非 Azure 托管中的连接字符串敏感数据
【发布时间】:2020-01-09 00:50:05
【问题描述】:

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

【问题讨论】:

  • 您是否担心您的 ISP 可以读取您的 appsettings.json?
  • 我不确定这一点,但我相信 IIS 只是不提供 appsettings.json 文件,所以如果有人尝试浏览它,他们只会得到 404
  • @Steve 某种,只是担心。并阅读一些文章说将敏感数据存储在配置文件中并不是一个好主意。所以,想想现实世界是如何部署连接字符串的。
  • @StevenLemmens 是的,它无法冲浪。但是部署到hsoting的时候存储在appsettings.json文件中安全吗?
  • 它不会通过 IIS 提供服务,但对于有人可以访问您的服务器的情况,它仍然是一个需要解决的问题。许多 ASP.NET Core 的 Microsoft 文档似乎希望将人们推送到 Azure 以获得许多不同的服务,以解决可能出现的问题或安全问题,老实说,这有点令人沮丧。您可以在部署时加密您的应用设置并在运行时解密。

标签: c# asp.net-core


【解决方案1】:

There is analog of Azure KeyVault它是免费和开源的。您可以在那里存储您的连接字符串和其他敏感数据。还有client library for .net

【讨论】:

    【解决方案2】:

    您的主要选择是:

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

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

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

    环境变量是 Azure Key Vault 之外最常用的变量。虽然未加密,但它们存储在服务器上(在您的项目之外),并且仅对在该服务器上具有足够权限的用户可见。如果恶意行为者能够访问具有查看环境变量权限的帐户,则可以说您的问题比暴露数据库凭据要严重得多。

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

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

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

    【讨论】:

    • 还可以查看 AWS 安全参数存储。您不必为外部环境变量绑定到 azure
    【解决方案3】:

    我使用“管理 Web 机密”来保存 db 和其他开发人员和队友的任何其他关键数据机密

    这将帮助您隔离各种平台

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

    【讨论】:

    • 当我发布我的项目时,我在我们的服务器上发布了一个“appsettings.production.secrets.json”,我确保这个 JSON 文件中的详细信息是正确的
    • 如果存储在环境变量中,它仅适用于特定用户。当 API 部署到主机时,它不会工作,因为 API 无法获取连接字符串。我对吗?如果存储在 appsettings.json 中并且是纯文本,会不会很危险,因为它会暴露敏感数据。
    猜你喜欢
    • 2020-07-15
    • 1970-01-01
    • 2023-04-01
    • 2017-07-02
    • 2016-12-27
    • 2014-07-14
    • 2010-10-20
    • 2013-05-26
    • 2016-01-11
    相关资源
    最近更新 更多