将数据库凭据存储在PHP常量和安全性中


Storing database credentials in PHP constans and security

可能重复:
将密码以纯文本形式存储在php变量或php常量中可以吗?

我曾经把我的数据库凭据存储在一个PHP文件中,如下所示:

<?php
    define('HOST', 'localhost');
    define('USER', 'db_user');
    define('PASS', 'user_pass');
    define('DB', 'database');
?>

我使用常量,但在最近的一个项目中,一位PHP程序员说,将数据库凭据存储到常量中是不安全的。我不明白。我试图找到一些信息,但没有人对此说什么。

将数据库凭据存储到PHP常量中是否存在安全风险?

唯一的风险是如果您在文档根下有定义。在这种情况下,如果您的服务器配置出现问题,并且人们可以看到您的PHP代码,则常量(以及数据库凭据)将被公开。

据我所知,最安全的方法是将凭据作为服务器环境的一部分,仅限于root用户。然后,开发人员可以使用_SERVER['db_user']等。这可能更安全,因为有权访问实际DB凭据的人更受限制。它还为您提供了根据服务器使用不同凭据的灵活性(例如,开发与生产)。但是,您可以使用phpinfo()var_dump($_SERVER)等查看所有服务器环境变量,因此您必须注意不要上传此类内容。

将数据库凭据存储到PHP常量中是否存在安全风险?

存储重要信息(如数据库的用户名和密码)总是有一些风险。

但我无法想象,使用常量比使用变量更具安全风险。

然而,一个潜在的风险是,配置是用代码编写的。所以它并不是静态的。使用不需要自己执行的配置文件可能更安全。