以安全的方式在PHP应用程序中存储MYSQL的密码

以安全的方式在PHP应用程序中存储MYSQL的密码,php,mysql,security,Php,Mysql,Security,我有一个php应用程序,它通过代码连接到数据库。我想知道存储这些凭证的安全方法是什么?这是一个linux服务器 编辑:我只是想听听一些有见地的意见,让我的同事和我的团队讨论一下。我反对加密任何密码,但我的团队不相信 我认为,如果密码被加密,那么我们也需要将解密密钥以明文形式存储在某个地方,从而使整个gig变得毫无意义。至少将其放在一个配置文件中,该文件无法通过Web服务器直接访问 这样一来,必须有人闯入您的机器才能阅读。没有“安全方式”。无论如何,必须对密码进行解密/解密,以便将其发送到DB库以

我有一个php应用程序,它通过代码连接到数据库。我想知道存储这些凭证的安全方法是什么?这是一个linux服务器

编辑:我只是想听听一些有见地的意见,让我的同事和我的团队讨论一下。我反对加密任何密码,但我的团队不相信


我认为,如果密码被加密,那么我们也需要将解密密钥以明文形式存储在某个地方,从而使整个gig变得毫无意义。

至少将其放在一个配置文件中,该文件无法通过Web服务器直接访问

这样一来,必须有人闯入您的机器才能阅读。

没有“安全方式”。无论如何,必须对密码进行解密/解密,以便将其发送到DB库以建立连接


充其量,将登录信息存储在站点文档根目录之外的文件中。这不是万灵丹,但至少如果您的服务器的配置被破坏,并开始提供php源代码而不是执行,它不会让您的凭据泄漏,因为该文件将无法直接访问。

同意其他人的意见,您需要在某一点上披露它

但是你可以使用php的crypt函数

首先使用此函数或其他函数加密密码,加密后将加密密码设置为数据库密码。。。 [注意-我不知道mysql是否允许您存储crpt返回的值以设置为密码] 连接到db frm php时,将原始密码传递给crpyt函数[或用于加密上述内容的函数/方法]将其存储在变量中,并在连接时提及此变量

$encrpted_pass = crypt($original_password);
$con = mysql_connect("localhost","mysql_user",$encrpted_pass);
缺点 如果您直接连接到MySQL,您将很难记住密码 要解决此问题,您可以在希望直接连接时创建单独的DB用户

2) 另一种方法是将密码存储在一个单独的文件中,检索文件的内容,将其存储在一个var中,然后使用该var连接到MySQL数据库,这样,u就不会公开用于连接数据库的文件中使用的密码

$pass=file_get_contents("mysql.txt");
$con = mysql_connect("localhost","mysql_user",$pass);
应用并允许专用MySQL用户仅从localhost进行连接。然后,即使连接凭据以某种方式泄漏,连接到数据库的唯一方法是通过web服务器


攻击者需要访问web服务器并能够执行任意代码/命令。如果这是可能的,那就太晚了。

加密怎么办?既然您必须将凭据发送到数据库服务器,就必须将其未加密。我同意,我不是专家,但这是我的主意。我只需要形成一个知情的意见,并将其提交给我的团队。我的经理坚持要加密密码。我看不出有什么押韵或理由,但如果这是他们想要的,我需要找出最好的方法。如果经理是一个典型的无能的尤兹,他正在制定一份清单,却不了解实际问题,那么这可能就足够了。但是,这也是毫无意义的。如果你的密码是挂锁,这种“安全性”只是把钥匙贴在锁的侧面。“是的,锁上了,我们100%安全。”谢谢你,秋葵。我们的MySQL实例位于应用程序的本地。所以我的逻辑是,为了访问数据库,攻击者需要在Web服务器上获取shell。然后一切都准备好了。