【问题标题】:How can I hide my password in my C# Connection string?如何在我的 C# 连接字符串中隐藏我的密码?
【发布时间】:2011-11-26 18:19:53
【问题描述】:

我有以下连接字符串:

Data Source=Paul-HP\MYDB;Initial Catalog=MyMSDBSQL;Persist Security Info=True;User ID=sa;Password=password

(.net 网络服务) 这显然可以通过打开 app.config 文件并查看配置设置来查看。

我需要的是一种让黑客看不到密码的方法。但同时,让它可自定义,以便在部署到另一个数据库时可以更改。

【问题讨论】:

    标签: c# dbconnection


    【解决方案1】:

    在 web.config 或 app.config 中加密连接字符串可能最容易

    How To: Encrypt Configuration Sections in ASP.NET 2.0 Using DPAPI

    【讨论】:

      【解决方案2】:

      您可以加密连接字符串 - 然后当您访问连接字符串时,解密它。这不是万无一失的,因为您会遇到存储密钥以解密连接字符串的问题!

      【讨论】:

        【解决方案3】:

        首先,不要使用“SA”帐户。如果有人获得密码,它会使您的数据库完全打开。使用只允许对特定数据库执行 CRUD 操作的自定义帐户。

        获得web.config 的唯一方法是入侵您的服务器。如果他们这样做了,那你就完蛋了。

        【讨论】:

        • 请鼓励投反对票,以便我有机会改进我的答案。
        • 等等,但是......这个答案实际上并没有回答这些家伙的问题! (不是我投反对票)
        • 我没有拒绝你的回答,但是还有很多其他的可能性可以从 web.config 中获取密码,不仅是为了破解服务器,例如一些病毒可以在部署之前从本地开发机器中获取它,或其他情况。无论如何......问题是如何加密密码,这是有道理的,因为关于密码保护的主要规则 - never keep it in plain text
        • 好点。谢谢。现在有关于加密的更好答案,所以没有必要添加有关它的信息。
        • +1 表示不使用 SA :)。我只是出于开发原因使用它,但这是非常重要的一点。
        【解决方案4】:

        你有很多选择——我知道的那些(按优先顺序排列):

        1. 在无需在配置文件中包含密码的情况下使用集成 (SSPI) 安全性
        2. 加密连接字符串(见Encrypting Configuration Information Using Protected Configuration
        3. 分别存储用户名和密码,使用字符串格式构造完整的连接字符串,

        例如,连接字符串可能如下所示:

        Data Source=Paul-HP\MYDB;Initial Catalog=MyMSDBSQL;Persist Security Info=True;User ID={0};Password={1}
        

        我会选择选项 1,如果那不可能,那么选项 2。我已经提到了选项 3 的完整性。

        你读过Protecting Connection Information (ADO.NET)吗?

        【讨论】:

        • 建议 2 从静态的角度来看看起来不错,但是(任何人)提供的解决方案都不允许在编译后自定义连接字符串?尽管我猜这是不可能的,因为这需要他们输入明文,而这正是 encription 所避免的。 P.s 为什么你编辑所有内容但不进行任何更改?
        • 如果您想自定义连接字符串,那么选项 3 可能有用 - 然后您可以单独加密密码(以及可选的用户名)。
        • 我用了方法2,原理是我可以保留一个config文件的副本,当需要更改时,输入详细信息并加密它。然后使用新写入的。 SSPI 对我来说是不可能的。干杯。
        • @Justin 你能给我们举一个 c# code abput option #3 的例子吗?谢谢
        【解决方案5】:

        我建议对连接字符串进行加密/解密。因此必须手动设置连接字符串。

        对于加密,请查看: http://dotnet-snippets.de/dns/encrypt-and-decrypt-strings-SID205.aspx

        对于自定义设置,请查看: http://msdn.microsoft.com/en-us/library/8eyb2ct1.aspx

        在运行时将 Encrypted 替换为正确的:

          public static void SetAppSettingValue(string Key, string Value)
           {
        
           System.Configuration.Configuration config == ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
        // Add an Application Setting.
        
         config.AppSettings.Settings[Key].Value = Value;
        
          // Save the changes in App.config file.
        
           config.Save(ConfigurationSaveMode.Modified);
        
            ConfigurationManager.RefreshSection("appSettings");
          }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-13
          • 1970-01-01
          • 1970-01-01
          • 2019-05-29
          • 2022-11-19
          • 2018-01-23
          • 2017-10-09
          相关资源
          最近更新 更多