【问题标题】:Is It Okay to Hard-Code Credentials?硬编码凭证可以吗?
【发布时间】:2011-09-01 14:07:39
【问题描述】:

我正在和朋友一起做一个小型网络项目。它涉及到很多 MySQL 查询,所以我创建了一个 ConnectToDatabase() 函数来连接到服务器并选择我们的数据库。

看起来像这样:

function ConnectToDatabase()
{
    mysql_connect("db.myawesomehost.com", "Bob", "correcthorsebatterystaple");
    mysql_query("USE BobDB;");
}

像这样对我们的凭据进行硬编码感觉真的很糟糕。不过,我想不出任何其他方法来处理它。将它放在一个常量中并不能真正解决任何问题,将它隐藏在某个文本文件中似乎很荒谬。

我应该关心吗?在有大量人员的大型项目中如何处理?

【问题讨论】:

    标签: security passwords hardcode


    【解决方案1】:

    将其分解为单独的配置文件。一方面,它至少可以让您设置一些变量,例如“DEBUG_MODE”,它将为您的测试环境切换您的生产凭据。如果您愿意,您可以选择将单独的文件保留在版本控制之下,或者在代码存储库中保留一个带有虚拟凭据的文件,这样用户就必须提供自己的凭据而不是访问全局凭据。

    【讨论】:

      【解决方案2】:

      您不应硬编码任何凭据。最好的办法是从配置文件中读取并缓存它们。即使在这种情况下,您最好不要以明文形式输入凭据 - 我们需要在配置文件中加密凭据。在 WSO2,我们从配置文件中读取的所有凭据都保持加密状态,并使用一种称为 Secure Valut [一种通用方法] 的方法来读取这些加密凭据并以明文形式提供给所需的应用程序...

      谢谢...

      【讨论】:

        【解决方案3】:

        典型的rails configuration 将用户名和密码存储在一个文件中。

        将它们分开似乎是合理的,这样您就可以在不共享机器特定信息的情况下共享代码。这对于他们的开发数据库拥有多个用户的多个开发人员很有用。

        从文件中读取不应该是太大的负担,尤其是某种格式的文件:xml、json、yaml、...

        【讨论】:

          【解决方案4】:

          正如其他答案所暗示的,大多数大型项目在项目中的某处硬编码用户名和密码,通常在配置文件中。我从未见过任何其他方式这样做,但是在未登录用户不需要数据库访问的特定情况下,可以加密数据库凭据并使用每个人的密码作为密码来解密它们。另一个缺点是如果用户忘记了密码,他们将无法在没有管理员干预的情况下恢复密码,并且所有现有用户都需要重置密码。

          【讨论】:

            猜你喜欢
            • 2012-04-17
            • 1970-01-01
            • 1970-01-01
            • 2010-09-26
            • 1970-01-01
            • 1970-01-01
            • 2012-04-14
            • 1970-01-01
            • 2012-06-22
            相关资源
            最近更新 更多