比在配置文件中以纯文本形式存储mysql密码更好的方法?

2022-08-30 12:42:16

许多PHP程序要求用户将mysql密码以纯文本形式(字符串或常量)存储在应用程序根目录的配置文件中,这总是让我感到困扰。

这么多年过去了,有没有更好的方法呢?

到目前为止,我已经提出了两个最小的安全提升:

  1. 使用.htaccess中的规则使文件无法通过Web读取(以防php失败或存在读取php源代码的安全漏洞)

  2. 在数据库连接建立(未设置)后销毁内存中的密码(以防止字符串转储导致安全漏洞,注入等)

但当然,这些都不能解决原始问题。

感谢您提出任何其他想法!


答案 1

就个人而言,我将敏感信息(如数据库连接详细信息)存储在 Web 文件夹根目录之外的配置.ini文件中。然后在我的索引中.php我可以做:

$config = parse_ini_file('../config.ini');

这意味着如果您的服务器意外开始以纯文本形式输出PHP脚本,则变量不可见(这种情况以前发生过,对Facebook来说是臭名昭着的);只有 PHP 脚本可以访问变量。

它也不依赖于 .htaccess,在 .htaccess 中,如果您的 .htaccess 文件被移动或销毁,则不会出现意外情况。

2017 年 2 月 14 日添加的警告:我现在将像这样存储配置参数作为环境变量。我已经有一段时间没有使用.ini文件方法了。


答案 2

由于您的代码需要密码,因此没有完美的安全性。但是你可以让它难以恢复。

我在我的Web配置中放了一些哈希值,作为环境变量,比如说MYSQL_PASS_HASH

然后我做一些类似的事情,然后就是密码。当然,如果你是偏执狂,你应该在那之后。md5(getenv('MYSQL_PASS_HASH').'gibberish$qwefsdf')unsetenv

您的密码不会从字面上存储在某个地方,只有当有人同时拥有您的Web配置数据库时,它才能恢复。

这发生在webroot之外的文件中(不要把你所有的信任都放在)。.htaccess


推荐