数据库连接参数的安全性

时间:2019-03-20 14:58:16

标签: php mysql pdo

<?php 
class Database {

    private $host       = "localhost";
    private $username   = "root";
    private $password   = "";
    private $dbname     = "myapp"; 

    public $conn;

    public function DBConnection() {
        $this->conn = null;
        try {
            $this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password);

            $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $this->conn->setAttribute(PDO::ATTR_DEFAULT_FETCH_MOD, PDO::FETCH_ASSOC);
            $this->conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        } catch(PDOException $exception) {
            echo "Connection error: " . $exception->getMessage();
        }

        return $this->conn;

    }
}             
?>

我正在使用上述PDO方法连接到我的数据库。但是,如果我尝试在其他页面上创建此类的新实例,请说debug.php,如:

$db = new Database();

它将在页面源中抛出包括我的密码在内的所有参数。

我的问题是,由此导致我的数据库安全受到损害的可能性有多少?

1 个答案:

答案 0 :(得分:1)

绝对不要在源代码中存储身份验证凭据(用户ID,密码,API密钥),尤其是在使用git之类的源代码控制系统的情况下。您git push一经拥有对存储库的读取访问权限,任何人都将获得对数据库的写入访问权限。有一些常见的选择:

  1. 将凭据存储在Web服务器配置中明确设置的环境变量中。
  2. 将凭据存储在Web服务器文档根目录之外的配置文件(例如YAML或INI文件)中,然后在应用程序的引导程序中读取该文件。 (并且不要在源代码管理存储库中包含该文件!)