【问题标题】:ASP.NET Core appSettings.json securityASP.NET Core appSettings.json 安全性
【发布时间】:2018-03-20 14:20:47
【问题描述】:

我有一个 ASP.NET Core 2.0 WebAPI 应用程序,它在 appSettings.json 中有 Db ConnectionString。 在开发过程中,它具有以下价值:

"DefaultConnection":"Server=localhost;Database=Tyroll;Trusted_Connection=True;MultipleActiveResultSets=true"

只有当我们将其发布到生产环境时,我们才会使用 VS 2017 发布配置文件使用适当的密码对其进行更改。

所以 SQL Server 的密码没有存储在存储库中,也没有问题。

文件 appsettings.json 是protected by IIS
我想知道的问题是,即使在 IIS 上,这个密码是否应该以某种方式“隐藏”?
一个原因是额外的安全性,这样 SQL 凭据就不是纯文本的,以防在此处发生违规行为。 另一个用于 IIS 管理员不应直接访问 SQL 服务器的授权场景。

我认为它可以被加密,并且应用程序本身将具有用于解密它的密钥。这不会是 100% 安全的,因为在 IIS 遭到破坏的情况下,即使这个密钥也可以从应用程序中进行逆向工程,但是当它以纯文本形式存在时,它会变得更加困难。

所以第一个问题是我应该这样做吗?

其次,如果 1.Q 是肯定的,那么最好/推荐的方法是什么?

.NetCore2 或 VS2017 或 IIS 或其他工具中是否有一些内置工具?

以下是一些相关链接:

【问题讨论】:

    标签: asp.net security connection-string password-encryption appsettings


    【解决方案1】:

    我建议您应该使用 Active Directory Integrated security 来访问数据库,应用程序池可以在用户帐户下运行,并且该特定用户帐户将仅具有对数据库的所需访问权限。这可以在受到攻击的情况下保护用户凭据,因为密码永远不会暴露。

    【讨论】:

    • 在我的情况下这不是一个选项,因为 SQL Server 不在同一个域中,它在 DMZ
    • 你的意思是说SQL服务器在DMZ中..它必须是公共数据库托管服务器..否则它不应该在DMZ中
    • 是的 SQL 服务器在 DMZ 中,所以 IIS 在另一个域中。它不是公共托管,它是私有的,只有来自我们国际空间站的具有用户凭据(用户名和密码)的应用程序才能访问它。
    【解决方案2】:

    我实施的解决方案是对 ConnectionString 中的 Password 进行自定义加密。
    但由于应用程序需要解密它,它更像是一个混淆。
    对于加密,我使用了 AES (使用 System.Security.Cryptography) 并存储了密钥:一半在 connectionString 本身中,另一半在应用程序中硬编码。
    另外 regex 被用来从 ConnectionString 中提取密码,然后用它的解密字符串替换。

    【讨论】:

      猜你喜欢
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      • 2018-01-16
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-27
      • 1970-01-01
      相关资源
      最近更新 更多