当使用 Entity Framework 访问非本地服务器上的数据库时,我应该如何在连接字符串(存储在 web.config 文件中)中指定用户名和密码参数?
我已经阅读了 C# 分步指南(John Sharp 2010 版),永远不要因为潜在的逆向工程或如果有人掌握了源代码而将它们硬编码到您的应用程序中。所以我想知道这样做的传统最佳实践。
最佳答案
硬编码用户和密码是错误的,原因有 3 个:
- 它给您一种安全的错觉,因为当您使用文本编辑器查看二进制文件时,您什么都看不懂,但实际上反汇编 .NET 程序集是小菜一碟
- 它强制允许所有软件开发人员知道用户和密码
- 这意味着用户/密码对的更改需要新的部署,其中还包括重新编译应用程序
这个问题没有 Elixir ,在这种情况下,安全性取决于负责安全的人员的纪律和善意。
在我的公司,它是这样的:
- 软件开发人员无权访问生产数据库,而且他们肯定不知道用户和密码
- 软件管理员拥有用户名和密码,在生产机器上部署应用程序时,他们将来自开发部门的
web.config
与他们自己的 secret 合并 - 除软件管理员外,没有其他人可以访问生产机器
在 web.config
中加密用户和密码只能帮助您这么多。最终,您将不得不在您的应用程序中以明文形式对加密 key 进行硬编码,这将我们带回到反汇编问题。
在我看来,一个非常好的解决方案是将我公司正在发生的事情与使用明文 key 和混淆的加密相结合。
总体思路是:
- 接受我对应用程序管理员所说的话
- 修改一个小细节:他们不知道明确的用户名和密码,他们知道一种加密形式
- 只有开发人员拥有解密加密的用户名和密码的 key ,并且他们在运行时使用它
- 开发人员应该混淆他们的程序集,这样任何人都不值得尝试对二进制文件进行逆向工程,找出明文 key ,以某种方式询问应用程序管理员加密的用户名和密码是什么(同时喝熊在工作郊游)然后把所有东西放在一起
这意味着某人(可能是公司的所有者或其他负责人)需要使用“greasemonkey”应用程序来加密用户名和密码,并将生成的加密结果提供给应用程序管理员。
不要忘记还有数据库管理员,他们最初为所有者提供了一对初始凭据。所有者需要更改密码,然后执行我布置的所有操作。
总之,有很多解决方案,有些比其他的更古怪。 这不仅仅在于工具和代码,还在于纪律。
关于c# - 使用 Entity Framework 时如何将数据库用户名和密码安全地存储在 web.config 文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18849652/