将数据库密码存储在 PHP 文件中是否安全?

信息安全 密码 php 密码管理 数据库
2021-08-25 20:29:28

我的connection.php文件存储连接到数据库的凭据:

<?php 
    $objConnect = mysql_connect("localhost","username","password"); 
    mysql_select_db("selectDB", $objConnect);
?>

当一个页面需要连接我只是使用的数据库时<?php include("connection.php"); ?>

这安全吗?黑客可以从该文件中窃取我的凭据吗?

4个回答

我的建议:不要在源代码中存储密码。

相反,将它们存储在配置文件中(在 web 根目录之外),并确保配置文件不可公开访问。原因是您通常不希望将您的密码签入源代码存储库或向所有可以查看您的 Web 根目录中文件的人公开。

将密码存储在 webroot 内的文件中还有一个额外的风险.php,这有点晦涩难懂,但可以通过将文件放在 web root 之外轻松避免。考虑:如果您正在connection.php使用文本编辑器进行编辑,并且在您编辑时连接断开,您的编辑器会自动将connection.php文件的副本保存在某个备份文件中:例如connection.php~(在同一目录中)。现在备份文件有一个不同的扩展名,所以如果有人试图获取该文件,Apache 服务器会很高兴地以明文形式提供该文件的副本,从而显示您的数据库密码。有关详细信息,请参阅1% 的 CMS 支持的站点公开其数据库密码

另请参阅开源项目如何处理安全工件?开源以及它如何用于安全项目?

这是相当安全的。要获取 php 文件的内容,黑客需要破坏您的服务器,或者您需要错误配置它。

我仍然建议配置 mysql 以便无法远程访问脚本使用的用户,并使用不同的用户进行管理远程访问。

如果您有一个 PHP 脚本可能会在您的服务器上下载文件,例如download.php?=index.php.

如果你检查谷歌,你会发现这个漏洞存在于许多其他网站中。

/etc/php/N.m/apache2/php.ini已经包含了部分存储MySQL用户名和密码,如果mysqli是用于:

[MySQLi]
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =

可以通过 php get_cfg_var方法轻松读取此密码

  • echo get_cfg_var("mysqli.default_pw")

如果黑客可以获得php许可,这可能是一个安全问题

我们可以使用自定义密钥配置密码,以便黑客需要猜测密钥,例如:

my_raldfklg_random_key_pw=top-secret-password

所以在php代码中我们可以通过加载密码

  • echo get_cfg_var("my_raldfklg_random_key_pw")