通过分离MySQL和PHP来保护MySQL


Securing MySQL with PHP by separating them

我设置了两个服务器,一个用于MySQL,另一个用于PHP。PHP为用户提供服务,并在nginx之上运行。第二个带有MySQL的服务器只能从PHP web服务器的同一IP访问。

通过这种方式,我想在可能的入侵者和他能够访问存储在MySQL数据库中的关键客户数据之间设置一个额外的屏障。

然而,如果某人闯入我的PHP服务器,他将可以访问所有的PHP文件,因此也可以访问MySQL服务器,因为PHP的所有配置文件都在PHP服务器上。

解决这个问题的好方法是什么?我知道这将是最坏的情况,但仍然有办法更安全地存储我的配置文件吗?

您可以使用客户的密码加密客户数据。PHP服务器和MySQL服务器都不知道该密码。但你可以从客户那里获得。因此,当客户登录时,他们会向您发送用于身份验证的密码。在那短暂的时刻,你将拥有密码,可以在发送给他的同时解密他的数据。

这样,如果你的整个网站都被泄露了,而黑客掌握了你的代码、密码、数据库访问权限等等,他仍然无法读取或修改客户的数据。

您可以使用IonCube或类似产品加密您的PHP,这使得获取存储在PHP文件中的任何类型的文本都非常困难。

之后,您通过SSL连接到MySQL,这样潜在的黑客就无法使用tcpdump,也无法通过监听网络接口来查看连接字符串是什么。

这样你就完全隐藏了你的数据库凭据。

如果有人闯入PHP服务器,他们也可以访问MySQL服务器,但如果他们实际上没有闯入,但只能访问源文件(因为PHP出现故障或.htaccess出现故障),如果你将配置文件和大部分源文件保留在www根目录之外,你可以防止巨大的损坏。

许多站点都有一个单一的入口点文件,整个站点都从该文件运行。如果只有入口文件(通常是index.php)在de-document根文件夹中,并且所有包含的php文件都向上移动到一个文件夹中,那么任何能够读取文件或获得目录列表的人都不会看到这些文件。

不过,如果有人真的闯入你的服务器,那也无济于事。最好不要让这种情况发生。

我想说有一种方法可以解决这个问题,但如果PHP可以访问服务器,那么任何有权访问源代码的人都可以逐步了解如何访问另一台服务器。一旦你的PHP文件被泄露,限制可以访问数据库的机器实际上是你唯一的希望。

当然,您也可以将文件的读取权限限制为http/www-dev/apache(读取PHP的内容),但如果它们真的损害了您的服务器,则不能保证它们也没有访问这些权限。

运行PHP的用户需要能够访问数据库。所以,若有人获得php用户权限,他也可以访问数据库,这是正常的。

然后适用基本安全建议。仅限Web服务器用户访问php文件,并仅向mysql用户授予所需的权限。而且,最重要的是,不要忘记备份网站和数据库。

您可以尝试将config.php的所有者设置为apache,并将0600这样的掩码设置为该文件。。。但是,如果某人可以作为apache用户运行php,那就不起作用了,我认为如果某人可以访问你的服务器,那就什么都不起作用。。。