如何保护静态用户数据?

信息安全 加密 php 数据库 mysql
2021-09-04 16:34:30

我想加密数据库中的用户名、电子邮件和密码字段并加密静态用户文件。我怎样才能做到这一点?我知道诸如 Gazzang 之类的软件,由于没有公布成本,我只能估计它每年将花费数千美元。

是否有任何替代解决方案我可以自己构建或使用在服务器上运行的可以加密字段和用户文件的软件?

不确定它是否有所作为,但我使用的是 PHP/MYSQL 并且我有云服务器。

2个回答

mysql 服务器上最简单的加密方法是使用随机生成的密码短语aes_encrypt() 。

您不应该加密用户密码,密码必须始终经过哈希处理。密码应使用 bcrypt 或 sha256 存储。

您必须解密的数据的加密:使用变量来设置密钥。

  • 不要记录包含用户输入的查询,它们将包含您正在加密的数据。如果您必须记录它,请不要授予数据库用户对日志的读取权限
  • 不要以特权用户身份运行您的数据库(例如本地系统/root)
  • 将密钥与 PHP 应用程序分开存储,并在数据库启动时实例化变量
  • 用另一个只有 root 才能访问的密钥加密密钥,bash 中的 openssl 是这样做的候选者。数据库用户不应直接访问密钥和密钥加密密钥。

您只需要验证的数据的盐渍哈希(密码)。

盐渍非常重要。这一点我怎么强调都不过分。使用相对便宜的设备(大约 2k)我可以在大多数算法中每秒运行 100m 哈希,更高端的设备(~6k - 主要用于工业目的)我能够达到每秒超​​过 12 亿哈希(sha, md5、md4 等)如果你的攻击者有一个 FPGA 场,每秒数万亿次猜测并不遥远。您可以在此处查看统计信息

使用 John 和未优化的代码,Linkedin 列表(不加盐的哈希)在不到 24 小时内使用默认的修改规则猜到了 @ ~70%... 给你的哈希加盐。当您的数据库暴露时,这将使您有时间通知您的用户更改他们的密码,而不会(必然)立即损害他们的访问权限。

如果您不需要它,请不要存储它。

我知道这不是直接的问题,但说真的,它同样重要。假设您的数据库在某个时候受到损害,如果它没有数据,则无法公开。

最后:对数据库使用最佳实践安全性:验证您的数据,使用存储过程来处理输入,以及监控和审核您的数据库访问日志。