security - 如何在 asp.net core(本地)中保护 ConnectionStrin

首先,我知道我们在 .Net 核心中没有 ConnectionStrings 和 AppSettings 本身,但在我的例子中,我想加密一个 ConnectionString 以及存储在我的 appsettings.json(或其他设置文件)中的一些其他应用程序配置。

我知道这个在互联网上已经讨论了很多,但似乎没有人有一个合法的答案.. 所以已经抛出的建议是:

  • 但是,使用 EnvironmentConfigurationBuilder... 这并不能真正解决问题,因为我们只是将纯文本配置从 appsettings.json 移到了环境变量)
  • 创建一个自定义的 ConfigurationProvider 来加密和解密 appsettings.json(或它的选择部分),但是..这也不能解决问题,因为我们需要将解密的 key 存储在我们可以访问的地方应用程序,即使我们确实将 key 存储为应用程序中的“硬编码”字符串,“黑客”也可以简单地对其进行反编译。

有人还提到,即使您对 appsettings.json 进行了加密,“黑客”也总是可以进行内存转储并找到数据的解密版本。我不是该领域的专家,所以我不确定如何这样的事情可能或有多复杂。

Azure Key Vault 也被提及过几次,但是......在我的情况下以及在与当局合作的很多情况下,这不是一个选项,因为不允许使用云服务。

我可能想多了,因为如果攻击者/黑客真的设法进入了我们的服务器,那么我们可能会遇到更大的问题..但是处理这个问题的方法是什么?您是否根本不关心并将其全部保留为“纯文本”?或者您是否应该采取某种行动并加密或掩盖 secret ?

最佳答案

您不需要加密配置文件中的连接字符串,因为最好的方法仍然是不将此信息存储在您的配置文件中,而是作为服务器上的环境变量。

在您的 appsettings.json 文件中,只需存储您的本地开发连接字符串。对于其他环境,在部署它的服务器上为配置文件中的每个子节点设置一个带有 __(双下划线)的环境变量。

您可以在 this page 上阅读这是如何工作的

如果你有如下配置文件

{ 
   "ConnectionStrings": { 
     "default": "Server=192.168.5.1; Database=DbContextFactorySample3; user id=database-user; password=Pa$$word;" 
   } 
}

在 Windows 服务器上,您可以像这样设置值

set "ConnectionStrings__default=Server=the-production-database-server; Database=DbContextFactorySample2; Trusted_Connection=True;"

我不知道您的部署流程和使用的工具如何,但值得深入研究并了解如何使用此功能。

例如,如果您在 Kubernetes 上部署,您可以使用 Helm设置您的 secret 值。

在我公司的 TFS 上,我们创建了一个发布管道并使用变量部分来设置 secret 值。当代码部署到 Kubernetes 上时,将使用这些值。 TFS 发布管道中的变量可以像密码一样隐藏起来,开发人员无法看到生产值。只有管​​理员可以

关于security - 如何在 asp.net core(本地)中保护 ConnectionString 和/或 AppSettings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62343221/

相关文章:

python - 使用 Python Click,如何添加超过 5 个选项,即超过 5 个?

javascript - 匿名访问如何跟踪?智威汤逊/ cookies / session ?

ruby-on-rails - 如何在 ruby​​ 中找到调用者类?

node.js - Node http.大文件传输失败并显示 'ERR_STREAM_PREMATU

html - Nodejs如何从ejs文件生成pdf文件

python - 条件概率 - Python

flutter - 如何在 Flutter 的 initState 中获取当前的 App Local

graphene-python - 如何在 Graphite 烯 Python 中将复杂类型作为参数

amazon-web-services - AWS 权限错误...Kinesis Firehose

javascript - 如何在对象中保留一些深层 Prop ?