2011-07-13 81 views
5

Web开发新手。我很好奇人们是如何做到的。在php中保护DB密码

我在写一些使用mysql数据库的php代码。截至目前,我的代码已经在代码中硬编码了。这段代码可以被所有开发者检出,所以每个人都可以访问密码。对我来说似乎非常非常错误。最重要的是,我可以想到一些并发症。我以圆点格式列出问题 -

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

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

  3. 我想防止对懒惰/醉倍,使开发者不要删除/降表等我显然有不同的开发者不同的访问。那么解决所有这些问题呢?

可能的解决方案:没有代码中的密码。要求开发者添加自己的密码,并确保它永远不会检查与解决方案

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

而且在相同的备忘(一种连接到上面的问题)

  1. 如果你在球队4个开发者,你如何建立开发环境?他们都使用相同的数据库吗?如果不是如何创建表格并用测试数据填充表格?你是否必须编写代码来填充测试数据?

非常感谢任何输入。

回答

5

把密码在一个单独的PHP文件,包含所有的应用程序设置,并将其包含在页面的顶部。然后可以将此文件保留在版本控制之外,并替换为每个部署。

请确保您将config.php文件(或任何您选择命名它的文件)保存在根目录之外,以便它不会被意外地提供给您的应用程序的任何用户。另外,作为进一步的预防措施,请确保你给它.php扩展名,这样如果它仍然得到服务,它应该首先被PHP解析,并且任何有用的信息(希望)被删除 - 通常的做法是因此可以用.conf.php.inc.php扩展名来命名它。

对于开发环境,我们使用的所有开发者共享一个数据库。它最初是根据实时客户端数据创建的,并将其克隆到我们的数据库中,并出于隐私原因对某些信息进行了编辑/替换。在我们的开发版本以及我们的本地主机版本中使用相同的数据库。

1

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

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

1

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

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

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