【发布时间】:2012-09-11 14:43:07
【问题描述】:
在使用 php 编写 Web 应用程序时,防止您的 MySQL 信息被他人(第三方)泄露或发现的最有效方法是什么?这些信息将包括在连接功能中使用的域名和登录名和密码。
例如,一个好的过程可能是将您的 mysql 连接函数保存在单独的 php 文件中,等等。
有什么想法吗?
【问题讨论】:
标签: php mysql security mysql-connect
在使用 php 编写 Web 应用程序时,防止您的 MySQL 信息被他人(第三方)泄露或发现的最有效方法是什么?这些信息将包括在连接功能中使用的域名和登录名和密码。
例如,一个好的过程可能是将您的 mysql 连接函数保存在单独的 php 文件中,等等。
有什么想法吗?
【问题讨论】:
标签: php mysql security mysql-connect
.php 文件中在文档根目录之外(因此不能通过网络直接访问).php 文件而不是.inc,这样即使它在网络上意外访问,它也会被执行而不是直接显示if (defined('DB_AUTH_LOADED')) return; define('DB_AUTH_LOADED', 1); 在您的凭据文件中),以避免任何可能的凭据变量重新定义这应该可以保护您免于直接访问您的凭据以及您自己的代码意外泄露凭据。如果攻击者可以将 PHP 文件上传到您的服务器并设法实际执行它们,那么这场战斗几乎就失败了,但上述措施应该可以让您相当安全,不会自己意外泄露您的凭据。
【讨论】:
我不能说这是否是最好的,但我就是这样做的;
我有一个 config.php 文件,其中包含我的数据库连接凭据,并且不能直接访问。我有一个需要 config.php 来建立连接的 DB 类,并且我有一个扩展 DB 类的站点类。
这是一种很常见的做事方式,被普遍接受。
【讨论】:
config.php 中而不是作为数据库类的私有变量的任何原因?
print_r 转储私有变量以及公共变量;任何意外的剩余调试都可能会暴露凭据。
您可以做的另一件事(如果您的凭据被泄露)是确保您为 PHP 将使用的任务设置的 mysql 用户被禁止发出 DROP 语句,如果您可以构建数据,甚至可能禁止 DELETE 语句所以。
尽可能为该用户提供对其他数据库的最低访问权限,可能只有保存该用户数据的数据库。
【讨论】:
类,包括?有很多方法可以做到这一点,但最终如果有人可以访问未解析的 PHP 文件,他们将拥有您的 MySQL 登录详细信息。
【讨论】: