0

我正在使用 PHP 和 MySql 编写一个 webapp。用户 A 将他们的密码发布到数据库,用户 B 的 PHP 文件应该访问密码。用户 A 指定密码的访问持续时间,密码存储在数据库中。持续时间完成后,表中的记录会自动删除,因此用户 B 的 PHP 文件无法再访问它。

现在我想知道的是,在规定的时间内将密码存储在表中的最佳且安全的方法是什么,这样当数据库受到威胁时,攻击者就无法知道密码。

4

1 回答 1

1

为了使数据免受攻击者攻击您的服务器,必须无法解密数据。如果您(您的服务器)可以解密数据,您可以假设攻击者也可以成功侵入您的服务器。

这意味着您需要对数据进行加密并保留必要的秘密以完全解密您服务器。想到的最明智的事情显然是让用户保守秘密。

一个好的方案可能是这样的:

  • 为每个用户生成一个公钥/私钥对,使用用户的密码锁定私钥
  • 将两个密钥都存储在您的服务器上
  • 当用户 A 向用户 B 发送内容时,使用用户 B 的公钥对数据进行加密;数据现在只能使用用户 B 的私钥解密,该私钥使用用户 B 的密码锁定,而您没有该密码
  • 当用户 B 想要检索数据时,要求/使用他的密码来解锁他的私钥来解密数据
  • 永远不要在服务器上的任何地方存储密码或明文数据

最大的问题是可用性,因为如果您从不将用户密码存储在任何地方,您可能不得不经常向他询问。另一件事是你应该真正知道你在这里做什么。即使将密码暂时保存在内存中也可能导致漏洞,更不用说整个事情实施起来非常棘手,如果您不完全理解所涉及的所有概念,很容易出错。

您可以将整个加密和解密过程移至客户端,因此您的服务器永远不会处理纯密码或纯文本数据。这有多可行取决于您的确切用例。

于 2013-04-15T03:50:04.690 回答