在php中保护数据库密码

时间:2011-07-13 19:24:29

标签: php mysql database security

是网络开发的新手。我很好奇人们是怎么做到的。

我正在编写一些使用mysql DB的php代码。我现在在代码中硬编码了密码。所有开发人员都可以检查此代码,因此每个人都可以访问密码。对我来说似乎非常错误。最重要的是,我可以想到一些并发症。我以子弹点形式列出问题 -

  1. 代码中硬编码的密码错误。我不希望所有开发人员都可以访问它,因为他们都可以查看代码。

  2. 如何区分生产和开发服务器/凭证?我有相同的文件包含prod和dev DB凭据。处理这个问题的最佳方法是什么?

  3. 我想防止懒惰/醉酒时间,以便开发人员不删除/删除表等。显然我可以对不同的开发者有不同的访问权限。这就是所有这一切的解决方案吗?

  4. 潜在解决方案:代码中没有密码。请devs自己添加密码,并确保它从未登记过。

    解决方案的问题:繁琐的部署过程。必须手动为生产/ QA部署添加密码,并确保每次部署前都能够连接到数据库。听起来太痛苦且容易出错。人们通常做什么?

    同样在同一张纸条上(与上述问题有关)

    1. 如果团队中有4个开发人员,您如何设置开发环境?他们都使用相同的数据库吗?如果不是,您如何创建表并使用测试数据填充表?您是否必须编写代码来填充测试数据?
    2. 非常感谢任何意见。

3 个答案:

答案 0 :(得分:5)

将密码放在一个单独的PHP文件中,其中包含您的所有应用设置,并将其包含在页面顶部。然后,可以将此文件保留在Version Control之外,并替换每个部署。

请确保将config.php文件(或您选择的任何名称)保留在根目录之外,以便不会意外地将其提供给您应用的任何用户。此外,作为进一步的预防措施,请确保为其提供.php扩展名,以便如果它仍以某种方式仍然提供,则应首先由PHP解析,并删除任何有用的信息(希望) - a通常的做法是使用.conf.php.inc.php扩展名为其命名。

对于Dev Environment,我们使用所有开发人员共享的单个数据库。它最初是从实时客户端数据创建的,克隆到我们的数据库中,出于隐私原因,某些信息被编辑/替换。在我们的开发构建中以及我们的localhost构建中使用相同的数据库。

答案 1 :(得分:1)

在您描述的那种情况下,您可以编写一个部署脚本,自动在源代码中的正确位置“填充”密码。然后,您的生产密码仅驻留在生产环境部署脚本中。您可以让开发人员手动将其添加到他们自己的本地环境中。

此外,您可以拥有一个包含所有这些设置的配置文件,并让您的应用程序从中加载它们,或者甚至是其他人建议的单独的php文件。配置/ php文件不应该在源代码管理中,每个开发人员都可以自己创建,你可以在生产中使用正确的。

答案 2 :(得分:1)

这通常通过同时具有配置文件的开发和生产版本来解决。生产版本包含开发数据库的连接信息(服务器名称,数据库名称,用户名,密码)。所有开发人员都可以查看此文件。

生产版本包含生产服务器的连接信息,不受信任的开发人员无法读取。将代码部署到生产站点时,请不要部署配置文件的开发版本。生产服务器的版本将保持不变。

您可以考虑完全从版本控制中删除配置文件。使用此方案,每个开发人员将维护自己的版本,或者可以从标准位置访问开发版本。