6

当使用实体框架访问非本地服务器上的数据库时,我应该如何在连接字符串(存储在 web.config 文件中)中指定用户名和密码参数?

我已经阅读了 C# 分步指南(John Sharp 的 2010 版),由于潜在的逆向工程或如果有人掌握了源代码,我永远不会将它们硬编码到您的应用程序中。所以我想知道这样做的传统最佳做法。

4

4 回答 4

7

硬编码用户和密码是不好的,原因有 3 个:

  • 它给您一种安全的错误印象,因为当您使用文本编辑器查看二进制文件时,您什么都不懂,但实际上反汇编 .NET 程序集是小菜一碟
  • 它强制所有软件开发人员被允许知道用户和密码
  • 这意味着更改用户/密码对需要重新部署,其中还包括重新编译应用程序

这个问题没有神奇的解决方案,在这种情况下,安全只取决于负责安全的人的纪律和善意。

在我的公司,它是这样的:

  • 软件开发人员无权访问生产数据库,而且他们肯定不知道用户名和密码
  • 软件管理员拥有用户名和密码,web.config在生产机器上部署应用程序时,他们将来自开发部门的消息与他们自己的秘密合并
  • 没有其他人可以从软件管理员那里访问生产机器

加密用户和密码web.config只能帮助你这么多。最终,您必须在您的应用程序中以清晰的形式对加密密钥进行硬编码,这使我们回到了反汇编问题。

在我看来,一个非常好的解决方案是将我公司发生的事情与具有明确密钥和混淆的加密相结合。

总体思路是:

  • 接受我所说的关于应用程序管理员的人
  • 修改一个小细节:他们不知道清晰的用户名和密码,他们知道加密形式
  • 只有开发人员拥有解密加密用户名和密码的密钥,并且他们在运行时使用它
  • 开发人员应该混淆他们的程序集,这样任何人都不值得尝试对二进制文件进行逆向工程,找出明文密钥,以某种方式询问应用程序管理员加密的用户名和密码是什么(在外出工作时喝熊)然后把所有东西放在一起

这意味着某人(可能是公司的所有者或其他负责人)需要使用“greasemonkey”应用程序来加密用户名和密码,并将生成的加密结果提供给应用程序管理员。

别忘了还有最初给所有者一对初始凭据的数据库管理员。所有者需要更改密码,然后执行我列出的所有操作。

总之,有很多解决方案,有些比其他的更古怪。这不仅在工具和代码中,而且在学科中。

于 2013-09-17T12:32:32.880 回答
2

您可以加密 web.config 的部分。请参阅 MSDN 上的此演练:http: //msdn.microsoft.com/library/dtkwfdky.aspx这很容易遵循。

于 2013-09-17T12:20:49.177 回答
1

您可以使用本文档中显示的方法轻松加密 web.config 文件的特定部分:加密和解密配置部分

它对您的应用程序代码是透明的,并且加密部分在加密它的机器之外是无用的。

于 2013-09-17T12:22:52.237 回答
1

您可以尝试使用以下代码,

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

于 2013-09-17T12:20:10.760 回答