Laravel 中的 App_KEY 有什么用

Spoony 54.3m2021-01-15698 次点击
每次 Laravel 开发人员新建或克隆 Laravel 应用时,生成 application key 或 APP_KEY 是最重要的初始步骤之一。

最近的 Laravel 安全更新修复了一个 APP_KEY 用途相关的漏洞。为了利用此漏洞,首先需要有权访问生产版 APP_KEY。解决此漏洞最简单的方法是转换 (更改) 您的 APP_KEY。这导致我们中的一些人提出了一个问题:应用程序密钥有什么作用?更改涉及什么?管理 Laravel 应用程序中的这些密钥的最佳实践是什么?

在这篇文章中,我们将讨论 APP_KEY 做和不做的事情,关于它与用户密码哈希的关系的一些常见误解,以及安全地更改 APP_KEY 的简单步骤而不会丢失对您数据的访问权限。

### 什么是 APP_KEY?
应用程序密钥是一个 32 位字符的随机字符串,存储在 .env 文件中的 APP_KEY 密钥中。 Laravel 安装程序会自动为您生成一个,因此您只会在克隆现成应用程序时注意到它的缺失。

要创建新密钥,您可以自己生成一个密钥并将其粘贴到您的 .env 中,或者可以运行 php artisan key:generate 让 Laravel 为您创建并自动插入一个密钥。

### 加密与散列
Laravel 中有两个主要的 facades:Crypt (对称加密) 和 Hash (单向哈希加密)。密码被 哈希散列,而 cookies 被 (可选) 加密。让我们看一下差异。

您会注意到,只有在需要对称 (可逆) 加密时,Laravel 才需要一个密钥 (APP_KEY)。用户密码的存储永远不可逆,因此完全不需要 APP_KEY。

但这并不意味着您的密钥应该被粗心对待。相反,请像对待其他任何生产凭证一样对待它:使用与 MySQL 密码或 MailChimp API 密钥相同的注意和安全性。

### 更改密钥
任何良好的凭证管理策略都应包括 轮换: 定期 (例如每 6 个月) 或在特定情况下 (例如员工离职) 更改密钥和密码。

幸运的是,您只需要记住一些事情,就可以轮换你的 APP_KEY。

#### 多台服务器
如果您从多台服务器提供相同的应用程序,则需要更新每台服务器上的密钥。

#### 现有用户的 sessions (cookies)
更改 APP_KEY 后,当前登录到您的应用程序的所有用户的会话均将失效。在最佳时间安排您的密钥轮换,以最大程度地减少给用户带来的不便。

#### 您已加密的其他数据
尽管 cookie 的安全性是 Laravel 唯一使用 APP_KEY 作为框架的地方,但是您的应用程序中可能会包含用于加密数据的自定义代码。如果您使用 Laravel 的加密功能,请制定并测试一个计划,以使用旧密钥解密该数据,然后使用新密钥重新加密。

### 设置新的 APP_KEY
首先,将现有的 APP_KEY 复制到其他地方,以防万一更改密钥会产生意外的副作用。

在尝试在生产服务器上轮换 APP_KEY 之前,请尝试在本地计算机上轮换 APP_KEY,以确保一切顺利。准备好后,运行 php artisan key:generate

### 要点
- 更改 APP_KEY 不会影响用户密码
- 如果您更改 APP_KEY,会导致 session (通过 cookie 实现) 无效,所有当前用户被注销
- 不要害怕您的 APP_KEY
- 您应该有一个策略来定期轮换 APP_KEY 以及其他凭据和密钥
- 如果您的代码已手动使用 Laravel 的加密器,则需要制定计划以使用旧密钥解密其加密数据,然后使用新密钥重新加密。

————————————————
原文作者:Summer
转自链接:https://learnku.com/laravel/t/41250
收藏 ♥ 感谢
暂无回复

登录注册 后可回复。



GitHub