首先,我知道我们在 .Net 核心中没有 ConnectionStrings 和 AppSettings 本身,但在我的例子中,我想加密一个 ConnectionString 以及存储在我的 appsettings.json(或其他设置文件)中的一些其他应用程序配置。
我知道这个在互联网上已经讨论了很多,但似乎没有人有一个合法的答案.. 所以已经抛出的建议是:
有人还提到,即使您对 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
flutter - 如何在 Flutter 的 initState 中获取当前的 App Local
graphene-python - 如何在 Graphite 烯 Python 中将复杂类型作为参数