【问题标题】:Is it possible to encrypt data in Laravel with APP_KEY which differ per user?是否可以使用每个用户不同的 APP_KEY 加密 Laravel 中的数据?
【发布时间】:2019-10-14 16:49:14
【问题描述】:

我正在使用 Laravel 框架来加密 MySQL 数据库中的几乎所有数据。由于隐私问题,这是一项要求。

Laravel 使用特定于应用程序的 APP_KEY 作为主密钥来处理加密和解密(OpenSSL / AES-256-CBC 密码)。

我想知道:在用户群上生成 APP_KEY 是否容易(或者是否有软件包)?所以每个用户都有一个 APP_KEY(例如 USER_APP_KEY)来处理所有用户特定的数据?

我认为这增加了一个额外的安全层。因此,即使数据被盗并且某个用户以某种方式被解密,其余数据对攻击者仍然无用。

还是我把事情复杂化了,单个 APP_KEY 是否足够安全?


已经试过了:

搜索现有的 Laravel 框架包。 通用 Google 搜索示例。

【问题讨论】:

  • 如果每个用户都有自己的密钥,那么该密钥必须存储在某个地方。出于实际目的,可能与用户数据一起在数据库的某个地方。这将密钥放在加密数据旁边。这使得整件事变得毫无意义。
  • 当前,APP_KEY 存储在 webroot 外部文件系统中的 .env 变量中。一种解决方案是在 webroot 之外添加某种数据结构,将用户链接到自己的 APP_KEY。
  • 您可以结合 user_id 和静态键,因为您在用户表 id 字段的 id 列中有主键,因此每次都会生成 diff 键。
  • @Peer 这通常不是明智的做法。 Web 服务器应该是无状态且可扩展的,因此假设您有多个该服务器的实例在运行以达到负载平衡的目的。在这种情况下,除了数据库之外,还需要在 Web 服务器上存储数据变得相当不切实际。
  • 一般来说,只有在攻击者没有密钥的情况下,加密才有意义。您应该问自己攻击者获取数据的概率是多少,但不是关键。如果您将密钥存储在某处的文件/环境变量中,那么他们很可能会在攻击您的服务器时将密钥与数据一起获取。加密数据库数据有用的唯一情况是备份泄漏,例如,没有随附的密钥。那可能性有多大?加密备份就足够了吗?您真正要防范什么?

标签: laravel encryption architecture


【解决方案1】:

是的,您可以为每个用户生成密钥并将其存储到users 表中。 以下代码示例用于生成密钥。

'key' => encrypt($this->generateRandomString(16))

private function generateRandomString($n) { 

    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 

    $randomString = ''; 
    for ($i = 0; $i < $n; $i++) { 

        $index = rand(0, strlen($characters) - 1); 

        $randomString .= $characters[$index]; 

    }      

    return $randomString; 

} 

当需要对内容进行解密时,可以如下进行。

$encrypter = new \Illuminate\Encryption\Encrypter($key);
$decrypted = $encrypter->decrypt($encryptedContent);

为了提高安全性,我建议您使用 APP_KEY 加密基于用户的密钥。 然后将加密的密钥存储在数据库中。

解密时需要先解密密钥。在您可以使用基于用户的密钥解密内容之后。 然后有人需要获取内容需要知道两个密钥,即用户密钥和应用密钥。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    决定使用单个 APP_KEY。我知道没有任何包可以处理这个问题。而且基于 cmets,它在安全性方面没有任何好处。

    【讨论】:

      猜你喜欢
      • 2017-04-01
      • 2011-06-21
      • 2018-06-14
      • 1970-01-01
      • 2015-05-11
      • 1970-01-01
      • 2018-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多