7

一点背景——

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

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

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

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

谢谢!

4

3 回答 3

3

不要存储明文密码。如果您的游戏变得流行,它可能会成为黑客不断攻击的目标,特别是如果它包含金钱方面的内容(例如,魔兽世界、travian 等)。在这种情况下,您需要假设尽管您试图保护您的系统,但有人可能会破解它,并因此获得敏感数据。您应该使用标准加密机制来执行此任务(例如,以安全的方式通过 HTTPS 将密码发送到论坛系统)。我还建议您探索@Joshua Kaiser 的评论 - 单点登录可能是满足您需求的关键,不要试图在这里重新发明轮子。例如,我可以告诉你我使用 kerberos,而 Kerberos 有一个票证机制,其中票证可以在应用程序之间重复使用。

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

于 2012-11-21T04:17:44.877 回答
0

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

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

如果处理得当,您可以将漏洞的时间范围限制在几毫秒内。

于 2012-11-21T04:09:15.057 回答
0

加密是一种方式。

  • 加密连接:HTTPS 的同义词。如果您的服务器支持,则使用 HTTPS 将数据传递给 phpbb。
  • 加密数据:要么加密密码并以某种方式存储密钥(非常不安全),要么使用非对称加密。请参阅我的问题的答案,以深入了解如何通过安全通道发送密码。
于 2012-11-21T09:45:26.030 回答