【问题标题】:Where do you store your PHP script configurations like DB access data?您将 PHP 脚本配置(如数据库访问数据)存储在哪里?
【发布时间】:2009-12-27 12:22:44
【问题描述】:

我有一个 config.php 文件,我只是在其中创建了一个包含所有框架配置的巨大数组。还有数据库源字符串,如“mysql:host=localhost;dbname=mydb”(什么叫,顺便说一句?)和数据库的用户名+密码。恐怕这是:

  1. 愚蠢的
  2. 不好;那里有更好的解决方案
  3. 不安全 (?)

那么 PHP 专家是如何做到这一点的呢?

【问题讨论】:

标签: php


【解决方案1】:

如果您有一个wwwhttpdocspublic_http 文件夹或类似的文件夹,而您的php 应用程序就在其中,那么最好将配置文件放在该文件夹之外,然后访问它像这样:

include "../config.php";

没有 FTP 访问权限,任何人都无法访问该文件,因此与将其放在应用程序文件夹中相比,它相对安全。

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

【讨论】:

  • 不幸的是,几乎 99,99% 的廉价虚拟主机不提供任何此类目录。根目录中的所有内容都可以访问,并且无法通过 ftp 访问 Web 根目录之上的内容。
  • 实际上,我所拥有的大多数“廉价”主机都以某种形式提供了这样的目录。这样做也符合主办方的利益。但请参阅我的编辑选项。
  • @openfrog:你有一个很好的声明,你从哪里得到你的数据?
  • 我见过的所有便宜的虚拟主机都有这个选项。
【解决方案2】:

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

将其存储在用户可访问的 PHP 文件中应该没问题,但这并不理想。如果服务器正确处理 PHP 文件,即使人们可以访问该文件,他们也无法访问这些值,因为他们只是获得了输出(什么都没有)。这当然有问题,(见 cmets)。
使用 PHP 文件是我用过的 PHP 项目(FOSS 和商业)最常用的方法。他们中的大多数都没有将它们存储在网络根目录之上。对于任何稳定的设置,从表面上看,将配置文件存储在 Web 根目录之上几乎没有什么意义,尽管考虑到 Murphy's law 如果可以的话,这是值得的(或者使用 .htaccess或您的服务器拒绝用户访问目录的等效项)

【讨论】:

  • "将它存储在 PHP 文件中应该没问题。" - 除非另一个网络服务器软件更新“破坏”配置,尤其是。 .php->application/x-httpd-php 映射...再次。这曾经发生过(在更大的托管公司),突然所有 .php 文件都以文本/纯文本形式发送:-S
  • PHP 最糟糕的一个原因 ;) 但没有真正的替代方案。所以我们可以开始混淆我们的代码,对吧? ;)
  • 这与 PHP 本身无关,而与配置了多少服务器有关。混淆也无济于事,因为密码需要以某种可读的形式存在,才能使用它来打开连接。
  • @openfrog:你似乎问了很多非常基本的问题给一个似乎非常不喜欢 PHP 的人。
  • 将 PHP 文件命名为以 .ht 开头的内容(例如 .htconfig.inc.php)也有帮助,因为 Apache 通常在其主配置文件中有一条规则,即从不提供任何已命名的文件.ht*
【解决方案3】:

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

  • 将配置文件保存在web文件夹外(这需要禁用PHP中的open_basedir配置)。
  • 使用 .htaccess 限制对配置文件的访问:

    订单拒绝,允许 拒绝一切 位置>

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

【讨论】:

    【解决方案4】:

    为什么在“config.php”中存储数据库用户名和密码不合适?据我所知,此文件中的数据不能公开显示。

    例如

    <?php
    $DB_User = "amindzx";
    $DB_Pass = "Something";
    
    // connect to DB and so on.
    ?>
    

    除非黑客可以访问您的 FTP。

    【讨论】:

      【解决方案5】:

      为什么在没有任何证券的情况下保存简单的 config.php 文件是愚蠢的?即使程序员找到了这个文件,他也无能为力,因为就像 amindzx 所说的“这个文件不能公开显示”。还是我错了?

      【讨论】:

      • 基本上不会,但是服务器的 PHP 配置可能会发生变化,这可能会导致文件变得可见。
      • “但是服务器的PHP配置可能会改变”,你能举个例子吗?
      • 在某些情况下 apache 无法正常工作并将 php 文件作为纯文本提供。这没有发生在我身上,但我听说过这样的故事。
      • 我经常看到它,他们更改了一些配置设置,或者正在处理或在崩溃后重建他们的系统,而 Apache 正在运行 没有 mod_php。大家好源代码...!!
      【解决方案6】:

      使用数据库或支付网关凭据等敏感信息,当我可以控制服务器时,我喜欢在我的 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;
      

      【讨论】:

      • 这是共享主机的最佳解决方案。
      【解决方案7】:

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

      【讨论】:

        猜你喜欢
        • 2010-11-03
        • 1970-01-01
        • 2010-11-11
        • 2014-09-07
        • 2020-11-14
        • 2013-11-17
        • 1970-01-01
        • 2012-06-18
        相关资源
        最近更新 更多