c#web app中的纯文本密码

时间:2014-03-20 18:17:42

标签: model-view-controller passwords

我是否正确地说,如果我的c#控制器中有一个纯文本密码(比如连接到SMTP邮件服务器),攻击者就无法查看此信息(或服务器的其余部分)除非服务器安全性被破坏,否则这方面的代码?

我在共享主机上,所以我无法用IIS来加密web配置(据我所知)。如果这是一种不好的做法,有没有人对如何最好地解决这个问题有任何建议?

1 个答案:

答案 0 :(得分:0)

  

如果这是一种不好的做法,有没有人对如何最好地解决这个问题有任何建议?

这是一种不好的做法。虽然您无法阻止能够读取服务器(或备份)上的文件的攻击者(快速,如果它们很好),但您可以强制他们花更多的时间和精力阅读您的代码/反汇编应用程序和配置文件。

您是否可以自己设置SMTP密码?在配置文件中存储大量的迭代次数(数百万;它只是启动延迟!),一个8字节的真正随机**盐,以及一个长的随机“密码”(二进制更好)。在你的代码中,当应用程序启动时,读取这些值,将8个真正随机字节的硬编码字符串添加到salt(“pepper”),并使用RFC2898DeriveBytes类生成实际的SMTP密码(您可能需要使用Base64编码)。不要求超过20个字节的RFC2898DeriveByutes输出;这是使用SHA-1作为本机哈希。显然,您需要在更改SMTP密码之前执行此操作:)。

无论您更改SMTP的能力如何,您始终可以使用上述RFC2898DeriveBytes加密密码,以生成128位密钥,以便在AesCryptoServiceProvider类中使用AES-128(如果您是在.NET 3.5或更高版本上,这是.NET中为数不多的FIPS 140-2 compliant encryption classes之一。

如果您想要一种方法来处理这种情况,以防止简单地读取文件以找出密码,您需要查看类似HSM(硬件安全模块)或设备外部的其他安全密钥存储提供程序。准备打开钱包了!

**在.NET中,使用RNGCryptoServiceProvider类为加密使用生成随机字节。