【问题标题】:how to secure connectionString如何保护连接字符串
【发布时间】:2013-08-30 08:35:18
【问题描述】:

我有一个应用程序,我应该在其中连接到 SQL Server。它受密码保护。因此,当我第一次启动程序时,我正在动态创建 connectionString 并将其保存在 app.config 中。下次我可以使用创建的连接字符串。我已经用谷歌搜索并决定执行以下操作:在 app.config 中加密 connectionString 并将密码保存在我的代码中。当我下次想连接数据库时,我将解密 connectionString,添加 userId 和密码,并用新的 connectionString 连接到服务器。在关闭程序之前,我会从 connectionString 中删除 userId 和 password 并再次加密。但我有一些问题:

1) 这是一个好的解决方案吗?

2) 当我第一次启动程序时,我需要创建连接字符串,所以代码中的某处应该是用户 ID 和密码。如何处理这个问题?

【问题讨论】:

标签: c# sql-server security


【解决方案1】:

如果您使用的是 windows 并且凭据与 windows 身份验证相同,则可以从连接字符串中省略用户名和密码,并将其替换为 Trusted_Connection=true

【讨论】:

    【解决方案2】:

    据我了解,您可以动态创建连接字符串。所以你也可以从代码中加密这个部分。加密算法默认会使用你的机器密钥加密部分,这里是如何做的链接http://www.dotnetcurry.com/ShowArticle.aspx?ID=185

    【讨论】:

    • 我用了这个方法。但是def注意“机器密钥”部分。一种解决方法是编写一个“后门”加密器(按钮?)....将未加密的信息放在配置文件中......然后运行“后门”加密代码.......
    【解决方案3】:

    在 app.config 中创建 DBUsername、DBPassword 和其他 DB 条目作为键。对于 DBPassword,使用硬编码在代码中的主密钥对其进行加密(可能是对称的)。这通常就足够了。还有其他方法,例如使用密钥库来存储密钥。

    如果您不想每次都构造 conn 字符串,请创建包含整个连接字符串的应用程序配置条目并使用主密钥加密整个内容(我在这里看不到任何值)。

    【讨论】:

    • 你能举个例子吗?
    • 1.编写测试程序生成主密钥:msdn.microsoft.com/en-us/library/… 2. 在测试程序中使用此密钥对 DBPassword 进行加密。 3. 将此加密的 DBPassword 写入 app.config 4. 复制您在步骤 1 中生成的密钥并在应用程序源代码中进行硬编码。 5. 当应用程序运行并且您需要生成 conn 字符串时,使用硬编码密钥(步骤 4)解密在 app.config 中找到的加密 DBPassword(步骤 3)。
    • 硬编码密码不能很容易地被逆向工程吗?
    • 神圣死灵,蝙蝠侠! “相当容易”取决于谁试图破坏系统。无论如何,还有其他可能性。您可以创建一个封装的 ODBC/JDBC 驱动程序,该驱动程序从安全保险库请求密码。您可以在代码中构造连接字符串并从同一个安全保险库中获取部件。取决于你想走多远:-)。聪明的钱可能会说强化您的服务器主机并审核访问文件系统的任何人,这样您就不会破坏应用程序的可扩展性。
    【解决方案4】:

    在关闭程序之前,我会从connectionString中删除userId和password并再次加密

    这不是一个好的解决方案。您的数据应始终加密或至少在程序终止时丢失。如果您的用户使用任务管理器杀死了您的程序(或者它只是崩溃了),并且您依赖于您的程序将在退出时加密数据这一事实,那么您的数据将保持未加密状态。

    您可以在获得用户名和密码时加密整个连接字符串。然后,任何时候你想连接,解密它,将它传递给所需的函数并摆脱它。永远不要以未加密的方式保存它。

    【讨论】:

    • 如果它们是硬编码的,为什么不从一开始就将整个连接字符串放入配置中呢?当然是加密的。
    • 我不知道sql server会在哪里,所以当我第一次运行程序时,客户选择服务器,并使用这个服务器名称,我正在创建connectionString
    • 用户选择了服务器,但是你已经知道用户名和密码了?这听起来很奇怪。但无论如何,有一个时间点你有连接字符串。加密并保存。仅在需要时才在内存中解密。
    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2010-10-20
    • 2014-04-13
    • 2013-05-26
    • 1970-01-01
    相关资源
    最近更新 更多