“正常”环境变量比IIS环境变量安全吗?

时间:2020-05-01 00:05:14

标签: asp.net-core iis environment-variables

我有一个在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之后可以读取这些环境变量。

方法2:system.webServer \ aspNetCore环境变量

在生产计算机上使用%WINDIR%\system32\inetsrv\config\applicationHost.config(IIS配置文件)可以达到类似的目的。可以手动或through 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>

iisreset之后,MyDotNetCoreSite可以将这些值读取为环境变量。

问题

我想将密码存储方法从方法1更改为方法2。前者为每个用户设置环境变量,后者为每个站点设置环境变量(我认为这样更整洁)。但是我找不到足够的文档来判断方法2是否具有与方法1相同的安全级别。设置“正常”环境变量会将其存储在HKEY_Users\my_prod_service_account SID\Environment\Pwd1的注册表中。访问注册表通常需要提升的权限,并且如果有人闯入该注册表,则与黑客知道Pwd1相比,我们面临的问题要大得多。 applicationHost.config和注册表一样安全吗?我可以放心地在其中存储密码吗?

1 个答案:

答案 0 :(得分:0)

我只能提出一些刻薄的问题/担忧:
我很好奇,您是否在命令行中完成了set并检查是否在输出中以明文形式列出了不需要的密码?
另外,如果您将所有密码都存储在一个类似方法2的文件中,那么这将成为一个不错的蜜罐。我不知道加密的效果如何,Lex Li说。

相关问题