暂时在MySQL *中存储明文密码是否安全*?

时间:2012-11-21 03:58:52

标签: java php mysql security phpbb3

一点背景 -

我运行一个用Java运行的游戏服务器,以及一个用PHP运行的论坛(phpbb)。我将游戏和论坛帐户关联起来,这样更改游戏中的密码会自动更改论坛帐户的密码。这两个系统使用不同的密码哈希算法,我需要使用phpbb的内置函数更新论坛端的密码哈希,这意味着我必须从PHP脚本调用它们(而不是运行我自己的代码)。

为了做到这一点,我决定让Java调用PHP脚本,只要需要更改密码就向PHP脚本发出HTTP请求,以触发完成论坛密码更改过程的PHP脚本帐户。但是,我不想将明文密码放在任何HTTP调用中,因为它可能会显示在日志文件中,也可能显示在其他可利用区域中。我目前的想法是,当Java端更改密码时,它会将新的明文密码放入数据库表中,然后发出HTTP请求以触发PHP脚本,这样就不会有任何散列或敏感信息进入HTTP请求。 HTTP调用只传递要更改的帐户的用户名,以及共享密钥的md5哈希加上用户名,以进行身份​​验证。当PHP脚本运行时,它从数据库中检索用户的新明文密码,立即将其删除,然后通过phpbb的散列算法运行明文密码并更新论坛数据库。

在典型条件下,明文密码在删除之前可能在数据库中的时间不到一秒。理想情况下,我根本不会将它存储在任何地方,但是当我无法预测论坛的密码哈希是什么时,我不确定如何将所需的更改从Java传递到PHP,所以我需要以某种方式发送执行散列的PHP脚本的明文密码。

有关更好的方法的任何想法,或者是否有关于在很短的时间内存储明文密码的任何反馈?我认为MySQL登录是安全的,不与其他人或项目共享。

谢谢!

3 个答案:

答案 0 :(得分:3)

不要存储明文密码。 如果你的游戏变得流行,它可能成为持续攻击黑客的目标 特别是如果它包含货币方面(即 - 魔兽世界,travian等)。 在这种情况下,您需要假设尽管您试图保护您的系统, 有人可能会破解它,结果获得敏感数据。 您应该使用标准加密机制来执行此任务(例如,通过HTTPS以安全的方式将密码发送到论坛系统)。 我还建议您探索@Joshua Kaiser的评论 - 单点登录可能是满足您需求的关键, 并且不要试图在这里重新发明轮子。我可以告诉你我和kerberos一起工作, 和Kerberos有一个票证机制,可以在应用程序之间重复使用票证。不幸的是我不懂PHP,也不知道论坛框架如何使用不同的身份验证模块。

P.S - 我错误地发了两次这个答案,并尝试按“删除帖子” - 我希望stackoerflow能够解决这个问题。

答案 1 :(得分:0)

这取决于您使用Java而不是PHP的数据库。在PHP中使用PDO连接到不同的数据库并操纵数据。您可以尝试简单地将一个DB作为主密码存储,另一个作为salve - 取决于反向加密。

让PHP(例如)将文本密码直接导入到临时字段中的Java数据库中 - 当然是特定于用户的 - 然后告诉PHP触发Java函数来读取该列,哈希,更新正确列并删除临时字段。

如果操作正确,您可能会将漏洞的时间范围限制在几毫秒内。

答案 2 :(得分:0)

加密就是这样。

  • 加密连接:HTTPS的同义词。如果您的服务器支持,请使用HTTPS将数据传递给phpbb。
  • 加密数据:加密密码并以某种方式存储密钥(非常不安全),或使用非对称加密。请参阅my question的答案,以便深入了解如何通过安全通道发送密码。