【问题标题】:How do I avoid having the database password stored in plaintext in sourcecode?如何避免在源代码中以明文形式存储数据库密码?
【发布时间】:2010-09-07 18:07:36
【问题描述】:

在我正在开发的网络应用程序中,我目前在连接数据库时使用了一个简单的解决方案:

Connection c = DriverManager.getConnection("url", "username", "password");

这很不安全。如果攻击者获得了对源代码的访问权,他也获得了对数据库本身的访问权。我的 Web 应用程序如何连接到数据库而不在源代码中以明文形式存储数据库密码?

【问题讨论】:

    标签: language-agnostic passwords database-connection


    【解决方案1】:

    您可以将连接字符串存储在 Web.config 或 App.config 文件中并加密保存它的部分。这是我在之前的一个项目中用来加密连接字符串的一篇非常好的文章:

    http://www.ondotnet.com/pub/a/dotnet/2005/02/15/encryptingconnstring.html

    【讨论】:

    • 凭据是否以纯文本形式从客户端传递到 sql sqlserver?如果是,有什么方法可以保护它?
    【解决方案2】:

    在 .NET 中,约定是将连接字符串存储在单独的配置文件中。

    然后,config file can be encrypted

    如果您使用的是 Microsoft SQL Server,那么如果您使用域帐户来运行应用程序,那么这一切都变得无关紧要,然后使用受信任的数据库连接。在这种情况下,连接字符串将不包含任何用户名和密码。

    【讨论】:

    • 凭据是否以纯文本形式从客户端传递到 sql sqlserver?如果是,有什么方法可以保护它?
    【解决方案3】:

    我可以向 .NET 程序员推荐这些技术:

    • 在配置文件中加密密码\连接字符串
    • 在客户端和服务器之间设置可信连接(即使用 Windows 身份验证等)

    这里是来自 CodeProject 的有用文章:

    【讨论】:

    • 如果使用 sql server 身份验证(而不是 windows 身份验证),那么凭据是否以纯文本形式从客户端传递到 sql sqlserver?如果是,有什么方法可以保护它?
    【解决方案4】:

    除非我错过了连接应该由服务器通过连接池管理的点,因此连接凭据由服务器而不是应用程序持有。

    更进一步,我通常构建一个约定,即前端 Web 应用程序(在 DMZ 中)仅通过 Web 服务(在域中)与 DB 对话,因此提供完全分离和增强的 DB 安全性。

    另外,永远不要为 db 帐户提供超过或超过基本需要的权限。

    另一种方法是通过存储过程执行所有操作,并仅授予应用程序用户对这些过程的访问权限。

    【讨论】:

      【解决方案5】:

      假设您使用的是 MS SQL,您可以利用 Windows 身份验证,该身份验证不需要用户名/源代码中的任何位置。否则我将不得不同意其他推荐 app.config + 加密的海报。

      【讨论】:

        【解决方案6】:
        1. 创建操作系统用户
        2. 将密码放入该用户的操作系统环境变量中
        3. 以该用户身份运行程序

        优点:

        1. 只有 root 或该用户可以查看该用户的 O/S 环境变量
        2. 在重新启动后仍然存在
        3. 您永远不会不小心将密码签入源代码管理
        4. 您无需担心搞砸文件权限
        5. 您无需担心加密密钥的存储位置
        6. Works x 平台

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-07-03
          • 2010-09-12
          • 2020-03-16
          • 1970-01-01
          • 2013-02-25
          • 1970-01-01
          • 2014-03-07
          相关资源
          最近更新 更多