繁体   English   中英

PHP /服务器端:如何正确隐藏数据库凭据文件

[英]PHP/Server Side: How to properly conceal database credentials files

在隐藏PHP类所需的数据库凭据时,我遇到了很多问题。 到目前为止,推荐的“解决方案”都没有奏效。

1)PHP手册建议将凭据保存在其他文件中:检查! 我所有的PHP数据库类都从其他文件插入凭据。

典型的数据库类

class database{
private static $dbc = null;

public static function get($page,$component = null){
    if(self::$dbc === null) {
        $root = $_SERVER['DOCUMENT_ROOT'];
        $path = '/some path/';
        $file = 'pdo.php';
        require( $root . $path . $file );
    }
 ...more code...

凭证文件

$dbhost = 'some.host';
$dbname = 'someDBname';
$dbuser = 'someUser';
$dbpass = 'somePassword';

2)尽管如此,我将所有信息保存在网络主机中的文件仍然可以被嗅探或找到。

如何隐藏此包含数据库信息的文件,以拥有真正安全的网站和数据库?

我建议将它们放在环境变量中。 你可以getenv

你可以将它们通过或者.env (Symfony和Laravel都使用这样的: 实例 )文件,或在.htaccess文件作为说明在这里

奖励:如果您偏执狂,可以撒盐并使用哈希密码(如此处所述) 但是我怀疑这会发生很大变化。


编辑:在注释中,@ deceze建议不要将凭证文件存储在文档根目录中。 这绝对是您应该遵循的。

让我详细说明。 假设您的网域example.com指向www/foo/bar/example.com/ ,而不是像www/foo/bar/example.com/db.php那样将文件存储在其中,而是将其存储在www/foo/bar/db.php不能通过浏览器访问,但是PHP仍然可以通过includerequire来访问ist。 您可以在路径中添加..以返回一个文件夹。 如果您将其放在文档根目录中,则可以使用http://example.com/db.php对其进行访问,并且如果您的服务器配置不正确(或者您使用的是db.yml类的其他形式),可以提供文件,从而公开您的凭据注意: db.php文件只是一个示例。 如上所述,我强烈建议您使用环境变量!


编辑2:坚持使用示例和PHP解决方案,而不使用环境变量。 您可以使用如下形式:

// the db class
class database{
    private static $dbc = null;

    public static function get($page,$component = null){
        if(self::$dbc === null) {
            $root = $_SERVER['DOCUMENT_ROOT'];
            $path = '/../db/';
            $file = 'pdo.php';
            require( $root . $path . $file );

            self::$dbc = new PDO($dsn, $dbUser, $dbPass);
        }

        return self::$dbc;
    }
}

// the pdo.php file
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$dbUser = 'dbuser';
$dbPass = 'dbpass';

文件结构将类似于

www
  foo
    yourwebsite
      .htaccess
      index.php
      foobar.php
    db
      pdo.php

该网站example.com将指向www/foo/yourwebsite

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM