将存储在mysql中的数据从一个人发送到另一个人的安全方式

时间:2013-04-15 03:33:47

标签: php mysql encryption

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

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

1 个答案:

答案 0 :(得分:1)

为了使攻击者无法攻击您的服务器,一定无法解密数据。如果您(您的服务器)可以解密数据,您可以假设攻击者也可以成功地攻击您的服务器。

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

一个好的计划可能是这样的:

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

最大的问题是可用性,因为如果你从不在任何地方存储用户的密码,你可能不得不经常问他。另一件事是你应该真的知道你在这里做了什么。即使在内存中暂时使用密码也可能导致违规,更不用说实现这一切并非常棘手,如果您不完全理解所有相关概念,那么很容易出错。

您可以将整个加密和解密过程移动到客户端,因此您的服务器从不处理普通密码或纯文本数据。这有多可行取决于您的具体用例。