![Config.php 文件中明文保存着 Mysql 密码,这是明智的吗?](https://linux22.com/image/696327/Config.php%20%E6%96%87%E4%BB%B6%E4%B8%AD%E6%98%8E%E6%96%87%E4%BF%9D%E5%AD%98%E7%9D%80%20Mysql%20%E5%AF%86%E7%A0%81%EF%BC%8C%E8%BF%99%E6%98%AF%E6%98%8E%E6%99%BA%E7%9A%84%E5%90%97%EF%BC%9F.png)
标题基本上说明了一切,在安装我的客户购买的 CRM 产品/前端(SugarCRM)时创建的默认 config.php 文件中是否以纯文本形式存储了 MySQL db 用户的密码?
是否有任何好方法可以加密密码本身以使其不只是存在于文件中而易于读取?
或者这只是一个问题,如果某人已经有权访问该文件,那么您就会陷入麻烦,因为他们已经进入了您的系统?
只是想知道针对这种情况的最佳做法是什么?
答案1
Web应用程序的配置文件通常以纯文本形式保存秘密。
大多数云托管供应商 (IaaS/PaaS) 支持在启动实例时传递自定义数据,以便将其作为环境变量使用。但是,必须修改应用程序才能支持从环境变量中读取机密。请参阅例子来自 Heroku。
是否有任何好方法可以加密密码本身以使其不只是存在于文件中而易于读取?
该文件的权限不应该是全世界可读的。
或者这只是一个问题,如果某人已经有权访问该文件,那么您就会陷入麻烦,因为他们已经进入了您的系统?
是的。访问系统是一种必胜的局面。强化系统是第一步。必须在所有层面进行强化,包括应用程序、数据库、操作系统、网络等。
请记住,安全是一个移动的目标,永远不会完成。
答案2
或者这只是一个问题,如果某人已经有权访问该文件,那么您就会陷入麻烦,因为他们已经进入了您的系统?
是的。
答案3
有一些方法可以通过加密方案、将密码等直接加载到内存等来部分缓解这种情况,但这些方案实际上就是混淆。如果你想让某个东西自动登录到其他东西,你别无选择,只能设置某种秘密,无论是否是纯文本,以赋予它这样做的能力。一旦你这样做了,系统被攻破总是意味着秘密也被攻破了。使这种情况变得更加困难的方案就是这样做的……它们并没有使它变得不可能。
需要自动登录的高安全性系统通常使用详细的监控来检测滥用模式,而不是禁止访问。
唯一可以确保的方法是根本不要将密码保存到数字存储器中,而是让人工输入。
将来,我们将拥有可以为我们做到这一点的人工智能,但是就目前而言,这就是我们所拥有的。