2009-12-02 137 views
1

首先,我意识到没有这样的事情是一个完全安全的解决方案(即使有,它的可用性会是废话)。安全(r)存储MySQL登录信息?

这就是说,你如何保护你的MySQL数据库免受有人下载你的代码和挑选它的危害?基于我对PHP的使用经验,似乎有必要在代码中将其存储在某个点或另一个位置,这会为我发送标志。我可以看到重构对变量,常量和(用户定义的)函数名称进行混淆的位置可能是有益的,但最终还是可以通过它进行追踪并使用数据库登录信息找到该文件。

想法?

回答

4

通常,MySQL身份验证信息存储在外部配置文件中。基于Web的应用程序使用的MySQL用户被授予有限的权限,如SELECT, INSERT, UPDATE, DELETE,并且不具有诸如ALTER, DROP, DELETE之类的权限。如果你想向公众发布代码,你将不会包含你的私人配置文件,而是一个通用/指导/最小配置文件。

以加密格式存储MySQL身份验证信息有点愚蠢,因为您还需要在本地存储私钥/解密。如果一个未经身份验证的用户在服务器上查看代码或配置文件是微不足道的,问题不在于代码 - 这是您的服务器设置& config。

1

安全性可以通过在web-root之外存储任何硬编码的信息(在配置文件或脚本中)以及通过抑制(在生产代码上)错误消息来辅助。这样,希望你的用户不会看到userValidate() expects exactly three paramaters

1

pygorex1是正确的,您应该使用外部配置文件,其中“外部”是指web根目录之外的文件。因此,即使您的Web服务器中存在配置错误(允许用户查看您的源代码),但由于无法通过浏览器直接访问数据库,他们将无法查看数据库凭据。

pygorex1对用户权限也是正确的。将mysql用户的访问限制在最低限度总是首选。即使黑客会得到您的mysql密码和用户名,如果用户权限仅限于例如SELECT查询,他也不会造成重大损失。他忘记提到的一件事是,只允许mysql用户从本地主机(或从任何主机上登录Web应用程序)登录,不要在允许的主机中使用通配符。