PHP 新手入门指南 - 隐藏敏感信息

2017-06-22  本文已影响158人  chansey

我们编写的程序中,有时会涉及到连接数据库或一些账户以及口令等敏感信息,如果直接在程序中通过硬编码将会不安全也不容易维护,比如:

<?php

class Connection
{
    public static function make() 
    {
        try {
            return new PDO('mysql:host=127.0.0.1;dbname=mytodo', 'root', '');
        } catch (PDOException $e) {
            die($e->getMessage());
        }
    }
}

如果这些信息控制不善容易造成信息泄漏,同时也难以维护管理。为此我们可以调整思路,让这些运行参数变得灵活可配置,从而到在编码时不直接暴露敏感信息,比如通过集中配置的方式来实现。

小实践

在之前系列的项目代码基础上。我们新增 config.php 文件:

// config.php
<?php

return [
    'database' => [
        'name' => 'mytodo',
        'username' => 'root',
        'password' => '',
        'connection' => 'mysql:host=127.0.0.1',
        'options' => [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
        ]
    ]
];

这里设置 PDO::ATTR_ERRMODE 表示要返回错误报告。
更多可以参考手册 PDO::setAttribute

我们将数据库需要用到的相关信息抽取出来集中到了 config.php 中,这很方便我们之后集中管理这些会变动的信息。

接下来我们将 database/Connection.php 文件内容更改为:

// database/Connection.php
<?php

class Connection
{
    public static function make($config) 
    {
        try {
            return new PDO(
                $config['connection'].';dbname='.$config['name'],
                $config['username'],
                $config['password'],
                $config['options']
            );
        } catch (PDOException $e) {
            die($e->getMessage());
        }
    }
}

在我们之前的 bootstrap.php 中,内容修改后如下:

<?php

$config = require 'config.php';

require 'database/Connection.php';
require 'database/QueryBuilder.php';

return new QueryBuilder(
    Connection::make($config['database'])
);

这样我们引入了配置文件 config.php 让它能为数据库连接进行灵活的配置,只要我们控制好 config.php 的私密性(这里暂不展开具体讨论),我们就已避免从硬编码的角度暴露敏感信息。

上一篇 下一篇

猜你喜欢

热点阅读