您在哪里存储PHP脚本配置,如数据库访问数据?

时间:2009-12-27 12:22:44

标签: php

我有一个config.php文件,我只是创建一个包含所有框架配置的大型数组。数据库源字符串之类的东西比如“mysql:host = localhost; dbname = mydb”(什么叫做btw?)和用户名+密码用于DB。我担心这是:

  1. 不好;那里有更好的解决方案
  2. 不安全(?)
  3. 那么PHP专家如何做到这一点?

7 个答案:

答案 0 :(得分:12)

如果你有一个wwwhttpdocspublic_http文件夹或类似的东西,你的php应用程序所在的位置,那么最好把配置文件放在那个文件夹,只需像这样访问它:

include "../config.php";

没有FTP访问权限,没有人可以访问该文件,因此与在应用程序文件夹中使用它相比,它相对安全。

如果您没有这样的文件夹,则可以创建一个文件夹,并在根目录中创建.htaccess文件,从而将所有请求重定向到该文件夹​​。有很多不同的方法可以做到这一点,但这是一个不同的问题。

答案 1 :(得分:6)

我将它存储在纯文本ini样式配置文件中,通常位于Web根目录之上,以便不允许用户访问它。在可以访问的情况下,我通常会有一个带有deny from all的.htaccess文件,以防止对它的所有访问。

将其存储在用户可访问的PHP文件中应该没问题,但这并不理想。如果服务器正确处理PHP文件,即使人们可以访问该文件,他们也无法访问这些值,因为他们只是获取输出(没有)。当然有这个问题,(见评论) 使用PHP文件是我用过的PHP项目(FOSS和商业用途)最常用的方法。他们中的大多数都没有将它们存储在Web根目录之上。对于任何稳定的设置,将配置文件存储在Web根目录之上的表面非常简单,尽管给定Murphy's law ,如果可以(那或使用它)值得做.htaccess或服务器的equilivent拒绝用户访问目录)

答案 2 :(得分:5)

大多数人都这样做,但您也可以尝试其中一些解决方案:

  • 将配置文件保存在Web文件夹之外(这要求禁用PHP中的open_basedir配置)。
  • 使用.htaccess:

    限制对配置文件的访问

    < Location /config.php>     命令拒绝,允许     拒绝所有人 < /地点>

  • 使用.ini文件和parse_ini_file功能(这本身并不是一个真正的解决方案,但可以与其他人合并)

答案 3 :(得分:3)

为什么要存储数据库用户名& “config.php”中的密码不正常?只要我知道,此文件中的数据无法公开显示。

E.G。

<?php
$DB_User = "amindzx";
$DB_Pass = "Something";

// connect to DB and so on.
?>

除非黑客能够访问您的FTP。

答案 4 :(得分:1)

为什么持有简单的config.php文件而没有任何证券是愚蠢的?即使程序员找到这个文件,他也无能为力,因为像amindzx说的那样“这个文件无法公开显示”。或者我错了?

答案 5 :(得分:1)

使用数据库或支付网关凭据等敏感信息,当我控制服务器时,我想在我的apache虚拟主机配置中添加以下行:

SetEnv DB_USER "myuser"
SetEnv DB_PASS "mypass"

在PHP中,您可以使用$ _SERVER ['DB_USER']访问它们。你可以使这个配置文件只能由root读取,你永远不能对php在运行时访问的文件做这个。一个警告:确保你禁用php_info并且不要用像print_r($ _ SERVER)那样愚蠢的东西来暴露这些变量。 (其中大部分是here的释义或被盗。)

对于非敏感配置,我喜欢做一个充满常量的类,这类似于你的设置,但我喜欢它的OOP-ness。

class Application
{
    const CONTACT_EMAIL = "me@mysite.com";
}

usage:
$contactEmail = Application::CONTACT_EMAIL;

答案 6 :(得分:0)

我通常也会在config.php中存储设置,例如数据库连接设置,文件路径等。