asp.net-core - “正常”环境变量是否比 IIS 环境变量更安全?
问题描述
我有一个在 IIS 上运行的 ASP.Net Core 网站。我需要存储网站在生产中需要访问的一些密码。我没有可用的付费密码存储系统。我选择将我的密码存储在环境变量中。所以在生产机器上我有:
- 服务帐户
my_prod_service_account
MyProdAppPool
运行在下面的应用程序池my_prod_service_account
- 一个网站
MyDotNetCoreSite
运行在MyProdAppPool
方法 1:普通环境变量
我以身份登录生产机器my_prod_service_account
并在 Powershell 中为此用户设置环境变量:
[Environment]::SetEnvironmentVariable("Pwd1", "MyPrecioussss1", "User");
[Environment]::SetEnvironmentVariable("Pwd2", "MyPrecioussss2", "User");
之后 MyDotNetCoreSite 可以读取这些环境变量。
方法二:system.webServer\aspNetCore 环境变量
%WINDIR%\system32\inetsrv\config\applicationHost.config
在生产机器上使用(IIS 配置文件)可以实现类似的功能。它可以手动编辑,也可以通过 UI编辑,但最终它看起来像这样:
<configuration>
<location path="MyDotNetCoreSite">
<system.webServer>
<aspNetCore>
<environmentVariables>
<environmentVariable name="Pwd1" value="MyPrecioussss1" />
<environmentVariable name="Pwd2" value="MyPrecioussss2" />
</environmentVariables>
</aspNetCore>
</system.webServer>
</location>
</configuration>
MyDotNetCoreSite之后iisreset
可以读取这些值作为环境变量。
问题
我想将我的密码存储方法从方法 1 更改为方法 2。前者为每个用户设置环境变量,后者为每个站点设置环境变量(我认为这更整洁)。但我找不到足够的文档来判断方法 2 是否具有与方法 1 相同的安全级别。设置“正常”环境变量将其存储在注册表中HKEY_Users\my_prod_service_account SID\Environment\Pwd1
。访问注册表通常需要提升权限,如果有人闯入,我们将面临比知道 Pwd1 的黑客更大的问题。applicationHost.config 和注册表一样安全吗?我可以放心地在其中存储密码吗?
解决方案
我只能给出一些令人头疼的问题/疑虑:
我很好奇,您是否set
在命令行中执行过操作并检查输出中是否以纯文本形式列出了任何不需要的密码?
此外,如果您将所有密码存储在一个文件中,例如方法#2,这将是一个不错的蜜罐。Lex Li 提到,我不知道加密的效果如何。
推荐阅读
- python-3.x - 如何正确使用 .desktop 图标在 Ubuntu 18.04 上启动 python3.8 Tkinter GUI?
- python-3.x - File.readlines() 不返回任何字符串;可能文件打不开
- python - 创建一个包含 6 个每种可能组合的列表
- amazon-cloudfront - 我需要帮助修复 CloudFront URL
- c# - WCF x509 证书消息身份验证在 VS 2019 中内置时有效,但在自托管时失败
- laravel - 不依赖控制器的 Laravel 依赖注入
- python - Python 类属性表现为字典
- python - for循环只取python aws dynamodb中的最后一个值
- python - 从令人困惑的字典数据结构中获取数据帧
- python - 使用 Hylang 的 Python 中的 RecursionError