在 PHP 中保持 MySQL 凭据私有的最佳方法是啥?

Posted

技术标签:

【中文标题】在 PHP 中保持 MySQL 凭据私有的最佳方法是啥?【英文标题】:What is the best way to keep your MySQL credentials private in PHP?在 PHP 中保持 MySQL 凭据私有的最佳方法是什么? 【发布时间】:2012-09-11 14:43:07 【问题描述】:

在使用 php 编写 Web 应用程序时,防止您的 mysql 信息被他人(第三方)泄露或发现的最有效方法是什么?这些信息将包括在连接功能中使用的域名和登录名和密码。

例如,一个好的过程可能是将您的 mysql 连接函数保存在单独的 php 文件中,等等。

有什么想法吗?

【问题讨论】:

【参考方案1】:
    将您的凭据保存在单独的.php 文件中在文档根目录之外(因此不能通过网络直接访问) 最好将它保存为.php 文件而不是.inc,这样即使它在网络上意外访问,它也会被执行而不是直接显示 在建立连接后不要保留用户名和密码(即,在不再需要它们后取消设置保存凭据的 vars 或数组键);你不能不小心暴露你不再拥有的东西 不允许重复包含凭据文件(例如,if (defined('DB_AUTH_LOADED')) return; define('DB_AUTH_LOADED', 1); 在您的凭据文件中),以避免任何可能的凭据变量重新定义

这应该可以保护您免于直接访问您的凭据以及您自己的代码意外泄露凭据。如果攻击者可以将 PHP 文件上传到您的服务器并设法实际执行它们,那么这场战斗几乎就失败了,但上述措施应该可以让您相当安全,不会自己意外泄露您的凭据。

【讨论】:

我在我自己的 php CMS 引擎中完全使用了这些方法……使用 CONSTANT、.htaccess 来保护配置文件,并在建立数据库连接后立即取消设置 db vars…… 【参考方案2】:

我不能说这是否是最好的,但我就是这样做的;

我有一个 config.php 文件,其中包含我的数据库连接凭据,并且不能直接访问。我有一个需要 config.php 来建立连接的 DB 类,并且我有一个扩展 DB 类的站点类。

这是一种很常见的做事方式,被普遍接受。

【讨论】:

您选择将数据库详细信息放在config.php 中而不是作为数据库类的私有变量的任何原因? print_r 转储私有变量以及公共变量;任何意外的剩余调试都可能会暴露凭据。【参考方案3】:

您可以做的另一件事(如果您的凭据被泄露)是确保您为 PHP 将使用的任务设置的 mysql 用户被禁止发出 DROP 语句,如果您可以构建数据,甚至可能禁止 DELETE 语句所以。

尽可能为该用户提供对其他数据库的最低访问权限,可能只有保存该用户数据的数据库。

【讨论】:

【参考方案4】:

类,包括?有很多方法可以做到这一点,但最终如果有人可以访问未解析的 PHP 文件,他们将拥有您的 MySQL 登录详细信息。

【讨论】:

以上是关于在 PHP 中保持 MySQL 凭据私有的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在 golang 中使用私有地图、切片的最佳实践是啥?

使用 PHP 在一个 MySQL 查询中获取多行的最佳方法是啥? [复制]

在设备中保存凭据的最佳方法[关闭]

pip.conf 中用于私有 PyPI 的凭据

在 PHP 和 MySQL 上处理时区的最佳方法是啥?

如何在 json 的帮助下使用 PHP、MySql 在 android 中验证用户登录凭据