【问题标题】:Where to put the database sensitive information [duplicate]将数据库敏感信息放在哪里[重复]
【发布时间】:2012-04-27 21:43:12
【问题描述】:

可能重复:
How to secure database passwords in PHP?

最近我得到了一个网站项目,该项目应该用 PHP 完成,但我在 PHP 方面没有太多经验。无论如何,它已经启动并运行,但还有很大的改进空间。我感觉不舒服的一件事是我处理数据库的方式:我将数据库连接信息放在一个单独的 db.php 文件中,并在需要的地方包含它。但我记得多次看到服务器返回的 PHP 源文件。

所以现在我的问题是:放置数据库敏感数据的更好或最佳方式/位置是什么?

顺便说一句,当出现问题时,如何不让 PHP 在网页上显示错误消息? php.ini 中某处的自定义错误页面或设置?谢谢!

注意:我使用的是旧式的 PHP,而不是面向对象的方式。但是,如果有更好的方法来为未来的项目做准备,我对面向对象或 MVC 方式持开放态度

【问题讨论】:

  • 好,重要的问题! +1 考虑安全性。
  • 顺便说一下,display_errors 应该在生产服务器上始终设置为 off。这样,PHP 将抛出 500 错误,而不是显示实际错误。
  • 我猜 php.ini 中的 display_errors = off 应该可以防止显示任何错误

标签: php database connection-string


【解决方案1】:

我不知道这是不是你要找的:
您可以将您的敏感数据放在您的 db.php 中,但在 web 根目录之外(public_html 或 www)。

例如,您可以有一个名为 config 的目录,它是您的 Web 根目录的同级目录,并将您的 db.php 文件存储在那里。

您可以像这样包含您的 db.php 文件:

require_once('../config/db.php');

我希望这会有所帮助。

【讨论】:

  • +1 对于此解决方案,也不要忘记将此文件的权限更改为最低但仍可被网络服务器读取。如果文件归网络服务器进程所有,也许0600 足够安全?。
【解决方案2】:

可以把它放在一个db.php文件中,在每个文档的<?php标签之后使用require_once()

如果 basedir 限制无效,请将 db.php 文件移到您的 web/ftp 根目录之外,这样它肯定无法通过 http/ftp 访问。请确保在此文件上正确设置了权限。

由于您的代码没有使用 OOP 或 MVC 结构,因此这是最好的选择。

【讨论】:

    【解决方案3】:

    我会亲自创建一个名为 db.php 的文件并将其放在您服务器上的 public_html 文件夹上方

    例如

    <?php
        error_reporting(0);
        $link = FALSE;
        $link = mysql_connect('hostname', 'username', 'password');
        if ( ! $link)
        {
            die("Couldn't connect to mysql server!");
        } else {
            mysql_select_db('databasename');
        }
    ?>
    

    这会在连接到数据库的同时关闭错误报告,从 index.php 中您可以像这样包含文件:

    <?php require('../db.php'); ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-01
      • 2011-11-19
      相关资源
      最近更新 更多