在 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>
我对互联网安全不太熟悉,所以如果这不安全,还有其他选择吗?
【问题讨论】:
只要您不介意任何有权访问源代码或文件系统的人都能看到该密码。这本质上并不是一件坏事,这完全取决于您。 如果您有<customErrors mode="Off"/>
,您将看到默认错误页面,根据错误,该页面可能会显示<mailSettings>
文件的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"
在部署到网络场时请考虑<machineKey>
的值。
如果您在 web.config 中设置 <machineKey>
,则基本上是在泄露解密密钥。
就像 David 在上面的 cmets 中所说的那样,如果您愿意与有权访问您的代码的人分享秘密,那么就可以了。
如果没有,请创建一个您不介意共享凭据的测试 smtp 环境,并将这些凭据放入 web.config。
或者查看 Papercut 之类的工具进行本地测试,并在部署之前/之后更改 web.config 中的值。
【讨论】:
以上是关于在 web.config 中硬编码密码是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章