保护Web应用程序(LAMP堆栈)中的数据库(MySQL)登录凭据

时间:2011-11-01 03:28:48

标签: php mysql security

首先,如果有完全重复 - 我没有找到任何,所以我道歉,以防答案已经提供。

我将提出我面临的问题,希望我能得到一些见解或直截了当的“不可能”的答案。

如果PHP被破坏的服务器,如何在Web应用程序中保护数据库凭据? 假设在这个问题的情况下我们不是在谈论共享主机,VPS或类似的东西,只有一个人可以访问存储MySQL信息的盒子。

MySQL服务器本身位于另一个(远程)盒子,只允许来自一系列IP地址的连接(绑定到PHP盒子)。

如何确保恶意用户无法获取MySQL连接字符串所需的详细信息?假设用户已经破坏了运行PHP的linux框的root登录。

在这种情况下,您在访问建立MySQL连接所需的信息方面会采取哪些措施来提供最高安全性?

感谢您提前阅读和评论。

2 个答案:

答案 0 :(得分:2)

如果这是一个主要优先级,那么这里的最佳解决方案是使用存储过程。

存储过程将数据库查询存储在数据库中,因此只需设置它们,然后创建一个只具有存储过程执行权限的新MYSQL用户。这样,即使应用程序代码被泄露,它们也只能操纵有限的数据子集,而且它们也不了解底层数据库结构。

这种方法的负面影响是可维护性,因为您的混合应用程序逻辑与您的存储系统混合,并且可能无法跨平台移植。

如果您想要一个简单的解决方案,hafichuk建议的可能会更好,只需根据您的需求进行定制。不幸的是,您的脚本需要能够访问数据库,除非您的Web服务器和应用程序服务器位于不同的计算机上并通过某些加密通道(如SSH)进行通信,但您的操作过于复杂。这一切都取决于保护对您的重要程度,以及您愿意确保保护的程度。

答案 1 :(得分:1)

不幸的是,PHP代码将以明文形式提供mysql系统的用户名和密码。我的建议是你限制那个数据库用户的权限(你使用的是非根目录的数据库用户)。

http://dev.mysql.com/doc/refman/5.5/en/adding-users.html。如果您正在使用phpmyadmin或其他UI,那么您可以通过这种方式限制用户权限。

基本上,您通常只希望向mysql用户授予SELECT,UPDATE,INSERT和DELETE,除非您的应用需要其他权限。

除此之外,希望其他人可以提供更好的解决方案。