当使用实体框架访问非本地服务器上的数据库时,我应该如何在连接字符串(存储在 web.config 文件中)中指定用户名和密码参数?
我已经阅读了 C# 分步指南(John Sharp 的 2010 版),由于潜在的逆向工程或如果有人掌握了源代码,我永远不会将它们硬编码到您的应用程序中。所以我想知道这样做的传统最佳做法。
当使用实体框架访问非本地服务器上的数据库时,我应该如何在连接字符串(存储在 web.config 文件中)中指定用户名和密码参数?
我已经阅读了 C# 分步指南(John Sharp 的 2010 版),由于潜在的逆向工程或如果有人掌握了源代码,我永远不会将它们硬编码到您的应用程序中。所以我想知道这样做的传统最佳做法。
硬编码用户和密码是不好的,原因有 3 个:
这个问题没有神奇的解决方案,在这种情况下,安全只取决于负责安全的人的纪律和善意。
在我的公司,它是这样的:
web.config
在生产机器上部署应用程序时,他们将来自开发部门的消息与他们自己的秘密合并加密用户和密码web.config
只能帮助你这么多。最终,您必须在您的应用程序中以清晰的形式对加密密钥进行硬编码,这使我们回到了反汇编问题。
在我看来,一个非常好的解决方案是将我公司发生的事情与具有明确密钥和混淆的加密相结合。
总体思路是:
这意味着某人(可能是公司的所有者或其他负责人)需要使用“greasemonkey”应用程序来加密用户名和密码,并将生成的加密结果提供给应用程序管理员。
别忘了还有最初给所有者一对初始凭据的数据库管理员。所有者需要更改密码,然后执行我列出的所有操作。
总之,有很多解决方案,有些比其他的更古怪。这不仅在工具和代码中,而且在学科中。
您可以加密 web.config 的部分。请参阅 MSDN 上的此演练:http: //msdn.microsoft.com/library/dtkwfdky.aspx这很容易遵循。
您可以使用本文档中显示的方法轻松加密 web.config 文件的特定部分:加密和解密配置部分
它对您的应用程序代码是透明的,并且加密部分在加密它的机器之外是无用的。
您可以尝试使用以下代码,
ConnectionStringsSection oSection = Configuration.ServiceConfiguration.GetConnectionStrings();
if(!oSection.SectionInformation.IsLocked && !oSection.SectionInformation.IsProtected)
{
oSection.SectionInformation.ProtectSection("RSAProtectedConfigurationProvider");
oSection.CurrentConfiguration.Save();
}
编辑:
您可以从 MSDN 链接获取有关受保护配置的更多信息, http: //msdn.microsoft.com/en-us/library/53tyfkaw.aspx