首页 > 解决方案 > “正常”环境变量是否比 IIS 环境变量更安全?

问题描述

我有一个在 IIS 上运行的 ASP.Net Core 网站。我需要存储网站在生产中需要访问的一些密码。我没有可用的付费密码存储系统。我选择将我的密码存储在环境变量中。所以在生产机器上我有:

方法 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 和注册表一样安全吗?我可以放心地在其中存储密码吗?

标签: asp.net-coreiisenvironment-variables

解决方案


我只能给出一些令人头疼的问题/疑虑:
我很好奇,您是否set在命令行中执行过操作并检查输出中是否以纯文本形式列出了任何不需要的密码?
此外,如果您将所有密码存储在一个文件中,例如方法#2,这将是一个不错的蜜罐。Lex Li 提到,我不知道加密的效果如何。


推荐阅读