在 web.config 中硬编码密码是不是安全?

Posted

技术标签:

【中文标题】在 web.config 中硬编码密码是不是安全?【英文标题】:Is it safe to hardcode a password in web.config?在 web.config 中硬编码密码是否安全? 【发布时间】:2018-10-25 08:31:28 【问题描述】:

像这样在 asp.net-project 的 web.config 中写入密码有多安全:

<mailSettings>
    <smtp from="example@web.com">
       <network host="smtp.web.com"
        port="123"
        userName="username@web.com"
        password="12345"
        enableSsl="true"/>
     </smtp>
</mailSettings>

我对互联网安全不太熟悉,所以如果这不安全,还有其他选择吗?

【问题讨论】:

只要您不介意任何有权访问源代码或文件系统的人都能看到该密码。这本质上并不是一件坏事,这完全取决于您。 如果您有&lt;customErrors mode="Off"/&gt;,您将看到默认错误页面,根据错误,该页面可能会显示&lt;mailSettings&gt; 文件的web.config 部分。我会避免将其存储在那里。 将密码存储在普通配置文件中是一种不好的做法。最好将它们存储在环境变量中,这样它们就不会出现在版本控制系统中,或者如果您将应用程序部署到 Azure,有一个带有特殊配置文件的解决方案 (docs.microsoft.com/en-us/aspnet/identity/overview/features-api/…) 【参考方案1】:

研究加密 web.config 部分。

https://msdn.microsoft.com/en-us/library/bb986855.aspx

https://***.com/a/6224769/461822

有点像

"aspnet_regiis.exe -pef "system.net/mailSettings/smtp" "C:\inetpub\wwwroot\website" -prov RSAProtectedConfigurationProvider"

在部署到网络场时请考虑&lt;machineKey&gt; 的值。

如果您在 web.config 中设置 &lt;machineKey&gt;,则基本上是在泄露解密密钥。

就像 David 在上面的 cmets 中所说的那样,如果您愿意与有权访问您的代码的人分享秘密,那么就可以了。

如果没有,请创建一个您不介意共享凭据的测试 smtp 环境,并将这些凭据放入 web.config。

或者查看 Papercut 之类的工具进行本地测试,并在部署之前/之后更改 web.config 中的值。

【讨论】:

以上是关于在 web.config 中硬编码密码是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 代码中嵌入密码的最安全方法是啥? [复制]

在 C 中硬编码或替换 char **argv

我可以在我的代码中硬编码字形索引吗?

app 安全测试概览

如何在 Swift 中硬编码 UIView 的大小属性

TYPO3:在 Fluid 模板中硬编码的语言相关变量