提问人:PowerCoder 提问时间:2/21/2023 最后编辑:PowerCoder 更新时间:2/22/2023 访问量:579
如何在 C# Web 应用程序中安全地存储数据库连接字符串?
How can I securely store a database connection string in a C# web application?
问:
我有一个 C# Web 应用程序,其数据库连接字符串保存在 web.config 文件中。此文件也是 git 存储库的一部分。如何保存连接字符串以防止其在不良参与者访问我的存储库时受到威胁?
加密文件会像这个老问题的答案一样解决我的问题吗? 如果是,如何在 .NET 中执行此操作?
答:
-2赞
Amentos
2/21/2023
#1
你应该(正如我看到的我的项目)将其存储在launchSettings.json中。
例如
"environmentVariables": {
"ConnectionStrings__MyDb":"Server=localhost\\SQLEXPRESS;Database=My;Trusted_Connection=True"
},
此文件对于所有程序员都是不同的。
评论
0赞
Hugh W
2/21/2023
这没有解决问题中的部分,即如何保存连接字符串以防止它在不良参与者访问我的存储库时受到损害?
2赞
mason
2/21/2023
不是“你应该”这样做。解决这个问题的方法有很多种,说你应该做某事而不提及优点、缺点或替代方案是非常具有误导性的。
1赞
Hugh W
2/22/2023
#2
有许多工具可以在 Git 存储库中安全地存储机密,您将在此处找到一个很好的概述(存档 1、存档 2),其中讨论了权衡。
在文章中提到的那些中,我只使用了 git-secret,它有这样的概要:
git-secret
加密文件并将其存储在存储库中,为每次提交提供更改历史记录。git
git-secret
除了提供适当的私钥(以允许解密)和用于解密所有机密文件外,不需要任何额外的部署操作。git secret reveal
至于如何向 ASP.NET 服务器提供密码的更广泛问题,这是一个很大的话题。我建议阅读指南保护 Microsoft 的连接字符串和其他配置信息。
0赞
Hades
2/22/2023
#3
切勿将敏感数据或凭据提交到 fit 中。
您可以使用用户密码在本地工作。
部署到服务器或宿主环境时,应使用环境变量。
这还有一个额外的好处,即允许您在每个环境中设置不同的值。
评论
Using Windows Authentication is not really suitable for my projects as multiple web apps run on one web server and I would like to separate the access different applications have.
您不必对所有应用程序使用相同的 Windows 帐户。事实上,您必须做额外的工作才能使用同一个帐户。首先,每个应用程序池都在其自己的虚拟服务帐户下运行。如果要使用域帐户,请为每个应用程序使用不同的 AD 帐户