【发布时间】:2014-04-29 14:32:21
【问题描述】:
我有一个从代码连接到数据库的 php 应用程序。我在徘徊存储这些凭据的一些安全方法是什么?这是一个 linux 服务器。
编辑:我只是想听听一些有见地的意见,以便我自己得到一个有见识的意见,以便与我的团队讨论。我反对加密任何密码,但我的团队不相信。
我认为,如果密码被加密,那么我们也需要将解密密钥以纯文本形式存储在某处,从而使整个工作变得毫无意义。
【问题讨论】:
我有一个从代码连接到数据库的 php 应用程序。我在徘徊存储这些凭据的一些安全方法是什么?这是一个 linux 服务器。
编辑:我只是想听听一些有见地的意见,以便我自己得到一个有见识的意见,以便与我的团队讨论。我反对加密任何密码,但我的团队不相信。
我认为,如果密码被加密,那么我们也需要将解密密钥以纯文本形式存储在某处,从而使整个工作变得毫无意义。
【问题讨论】:
没有“安全方式”。无论如何,必须对密码进行解密/未混淆处理,以便将其发送到数据库库以建立连接。
最好将登录信息存储在站点文档根目录之外的文件中。这不是万灵药,但至少如果您的服务器配置损坏并开始提供 php 源而不是执行,它不会让您的凭据泄露,因为该文件将无法直接访问。
【讨论】:
$pw = base64_decode('blahblahbalbhalblah') 可能足以解决这个问题,如果经理是一个典型的无知的 yutz,他正在处理一份对实际问题没有理解的清单。但同样,这是毫无意义的。如果您的密码是挂锁,这种“安全性”只是将钥匙贴在锁的侧面。 “是的,它已锁定,我们 100% 安全”。
至少把它放在一个不能通过网络服务器直接访问的配置文件中。
这样就必须有人闯入你的机器才能读取它。
【讨论】:
应用defense in depth 并只允许专用 MySQL 用户从 localhost 进行连接。然后,即使连接凭据以某种方式泄露,连接到数据库的唯一方法是通过 Web 服务器。
这样,攻击者将需要访问 Web 服务器并能够执行任意代码/命令。如果这有可能被妥协,那就太迟了。
【讨论】:
同意其他人的观点,您需要在某些方面披露...
但是你可以使用 php 的 crypt 函数 http://docs.php.net/manual/en/function.crypt.php
首先使用此功能或其他功能加密密码,加密后将加密密码设置为您的数据库密码... [注意-我不知道mysql是否允许您存储crpt返回的值以设置为密码] 在连接到 db frm php 时,将原始密码传递给 crpyt 函数 [或上面用于加密的函数/方法] 将其存储在一个变量中并在连接时提及这个 var
$encrpted_pass = crypt($original_password);
$con = mysql_connect("localhost","mysql_user",$encrpted_pass);
缺点 如果您直接连接到 MySQL,您将很难记住密码 要解决这个问题,您可以在想要直接连接时创建一个单独的数据库用户..
2) 另一种方法是将密码存储在单独的文件中,检索文件的内容,将其存储在 var 中,然后使用该 var 连接到 MySQL DB,这样你就不会泄露用于连接数据库的文件中使用的密码
$pass=file_get_contents("mysql.txt");
$con = mysql_connect("localhost","mysql_user",$pass);
【讨论】: