如果我在其中一个c#控制器中有一个纯文本密码(比如连接到SMTP邮件服务器),那么攻击者就无法查看此密码(或其他服务器端代码),除非服务器安全性被破坏,这样说对吗?
我在共享主机上,所以我不能用IIS来加密网络配置(据我所知)。如果这是如此糟糕的做法,有没有人有任何建议,如何最好地解决这个问题?
发布于 2014-03-21 08:36:52
如果这是如此糟糕的做法,有没有人有任何建议,如何最好地解决这个问题?
这是一种糟糕的做法。虽然您不能阻止可以读取服务器(或备份)上的文件的攻击者找出它(如果他们是好的,很快),但您可以迫使他们花费更多的时间和精力来读取您的代码/反汇编应用程序和配置文件。
是否允许您自行设置SMTP密码?在您的配置文件中存储一个非常高的迭代次数(数百万次;这只是启动延迟!),一个真正的随机**8字节的盐,以及一个长的随机“密码”(二进制更好)。在您的代码中,当应用程序启动时,读取这些值,向盐中添加一个8个真正随机字节的硬编码字符串(一个"pepper"),并使用RFC2898DeriveBytes类生成实际的RFC2898DeriveBytes密码(您可能必须用Base64编码)。不要要求超过20字节的RFC2898DeriveByutes输出;这是使用SHA-1作为本机散列。显然,您需要在更改SMTP密码之前执行此操作:)。
不管您是否有能力更改SMTP,您始终可以加密密码,使用上面的RFC2898DeriveBytes生成一个128位密钥用于AES-128,如果您使用的是.NET 3.5或更高版本,这是.NET中为数不多的FIPS 140-2 compliant encryption classes之一。
如果您想要一种方法来防止简单地读取文件找出密码,您将需要考虑HSM (硬件安全模块)或设备外部的其他安全密钥存储提供程序。准备好打开你的钱包!
**在.NET中,使用RNGCryptoServiceProvider类生成随机字节以供加密使用。
https://stackoverflow.com/questions/22541761
复制相似问题