首先,我意识到没有一个完全安全的解决方案(即使有,它的可用性也会很糟糕)。
那就是说,如何保护您的MySQL数据库不被下载代码并通过它挑选的人所破坏?根据我使用PHP的经验,似乎必须将它存储在代码中的某个时刻,这会为我发送标记。我可以看到在哪里进行重构来混淆变量,常量和(用户定义的)函数名称可能是有益的,但最终它仍然可以通过它进行跟踪并找到带有DB登录信息的文件。
想法?
答案 0 :(得分:4)
通常,MySQL身份验证信息存储在外部配置文件中。基于Web的应用程序使用的MySQL用户具有有限的权限,例如SELECT, INSERT, UPDATE, DELETE
,但未授予ALTER, DROP, DELETE
等权限。如果要将代码发布给公众,则不会包含私有配置文件,而是包含通用/指令/最小配置文件。
以加密格式存储MySQL身份验证信息有些愚蠢,因为您还需要在本地存储私钥/解密。如果未经身份验证的用户查看服务器上的代码或配置文件是微不足道的,则问题不在于代码 - 这是您的服务器设置和安装。配置。
答案 1 :(得分:1)
可以通过在Web根之外存储任何硬编码信息(在配置文件或脚本中)以及通过抑制(在生产代码上)错误消息来辅助安全性。这样,希望您的用户不会看到userValidate() expects exactly three paramaters
。
答案 2 :(得分:1)
pygorex1是正确的,您应该使用外部配置文件,其中“外部”表示Web根目录之外的文件。因此,即使您的Web服务器中存在允许用户查看源代码的配置错误,他们也无法查看数据库凭据,因为无法通过浏览器直接访问它们。
pygorex1对用户权限也是正确的。始终首选将mysql用户的访问权限限制为最小值。即使黑客会获得你的mysql密码和用户名,如果用户权限仅限于例如SELECT-queries,他将无法造成重大损害。他忘记提到的一件事是,只允许mysql用户从localhost(或从Web应用程序所在的任何主机)登录,永远不要在允许的主机中使用通配符。