Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP应用程序中保持数据库凭据的安全_Php_Mysql - Fatal编程技术网

在PHP应用程序中保持数据库凭据的安全

在PHP应用程序中保持数据库凭据的安全,php,mysql,Php,Mysql,我正在开发我的第一个PHP应用程序。现在,我将数据库连接详细信息保存在根文件夹之外的配置文件中的常量中,因为我知道这是防止人们获取您的数据库凭据的最安全的方法 如果我将该文件包含到我的PHP应用程序中,那么这些常量现在在我的代码中不是随处可见吗?这不是一件坏事吗?我个人的想法是创建一个数据库类,并将其存储在根目录之外,然后将凭据放入私有参数中。所以应该是这样的: class Db { private $host = 'host'; private $dbname = 'dbna

我正在开发我的第一个PHP应用程序。现在,我将数据库连接详细信息保存在根文件夹之外的配置文件中的常量中,因为我知道这是防止人们获取您的数据库凭据的最安全的方法

如果我将该文件包含到我的PHP应用程序中,那么这些常量现在在我的代码中不是随处可见吗?这不是一件坏事吗?我个人的想法是创建一个数据库类,并将其存储在根目录之外,然后将凭据放入私有参数中。所以应该是这样的:

class Db {

    private $host = 'host';
    private $dbname = 'dbname';
    private $username = 'username';
    private $password = 'password';

    private $connection;

    public function __construct() {
        $this->open_connection();
    }

    private function open_connection() {
        try {
            $this->connection = new PDO('mysql:host=' . $this->host . ';dbname=' . $this->dbname, $this->username, $this->password);
        } catch (PDOException $ex) {
            // handle exception
        }
    }

}

然后我将只包含这个文件,有什么想法吗?

这会增加一些安全性,但我不确定它是否完全值得。将配置文件保留在根目录之外的原因是为了防止客户端在web上调用凭据。只要用户没有办法执行自己的PHP,那么使用第一个方法应该是安全的,这是不应该的


如果他们有终端访问权限,你应该更专注于增加难度。您应该锁定这些文件,以便只有root用户才能看到它们。还禁用外部数据库访问,阻止防火墙中的端口3306,并禁用Mysql网络。我希望这会有所帮助,祝你好运。

如果有人访问你的PHP源文件,你会遇到比数据库登录更大的问题。只是说说而已


我将DB凭据保存在一个有意义的地方:在连接到数据库的函数调用中。

但是将凭据保存在函数调用中可能会变得非常冗余,并且很难更改它们。@Micah Um。。。只有一个函数调用才能连接到数据库…这取决于项目的规模。如果它都在一个文件是的,你可以连接一次,但如果你运行一个完整的网站。。。不。如果你只有一个数据库用户和一个共享文件,它仍然可以工作。@Micah普通人有一个
DB
类,或者包含一个
connect.php
文件。所以就代码而言,这是我为安全考虑所能做到的,我的下一步是确保我的web服务器是安全的,这是正确的吗?这当然有一些有用的提示,但是我认为我在共享的托管帐户中所能做的有些有限,不是吗?这完全取决于管理员,但是如果管理员没有做这些事情,你可能想考虑其他人,除非他们有一个很好的理由。另外,如果您不能将权限限制为root,则应使其仅允许您的用户查看。