我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Laravel中App_KEY的作用是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Laravel中App_KEY的作用是什么

这篇文章主要介绍“Laravel中App_KEY的作用是什么”,在日常操作中,相信很多人在Laravel中App_KEY的作用是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Laravel中App_KEY的作用是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Laravel 安全修复

8月初,Laravel 5.5 和 5.6 收到了与 Cookie 序列化和加密有关的安全修复程序。一方面,修复很简单,大多数应用程序可能没有受到影响。另一方面,这是一个严重的安全风险,表明我们的社区需要更好地了解 APP_KEY 的工作方式。

要利用此安全漏洞,需要有人知道您的 APP_KEY,这就是为什么我要带您详细了解您的密钥,为什么重要以及如何更改它的原因。

什么是 APP_KEY

应用程序密钥是一个32位字符的随机字符串,存储在 .env 文件中的 APP_KEY 密钥中。 Laravel 安装程序会自动为您生成一个,因此您只会在克隆现成应用程序时注意到它的缺失。要创建新密钥,您可以自己生成一个密钥并将其粘贴到您的 .env 中,或者可以运行 php artisan key:generate 让 Laravel 为您创建并自动插入一个密钥。

应用程序运行后,便会在一个地方使用 APP_KEY:cookie。Laravel 将密钥用于所有加密的 cookie (包括会话 cookie),然后再将其交给用户浏览器,并使用它解密从浏览器读取的 cookie。这样可以防止客户端更改其 cookie 并为其授予管理员特权或模拟应用程序中的其他用户。加密的 cookie 是 Laravel 中的重要安全特性。

所有这些加密和解密操作均由Laravel通过 Encrypter 使用 PHP 内置的安全工具处理,包括 OpenSSL。

关于密码哈希的常见误解

在 Laravel 社区中,包括我自己直到最近,一个非常普遍的误解是任务 APP_KEY 用于登录密码的加密。幸运的是,事实并非如此!我觉得这导致许多人认为 APP_KEY 是不可更改,除非重置所有用户的登录。

密码并非被加密,而是被 哈希散列.

Laravel 的密码使用 Hash::make()bcrypt() 进行哈希处理,但都不使用 APP_KEY。让我们看一下 Laravel 中的加密和哈希。

加密与散列

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

对称加密

假设我想向我的朋友亚瑟 (Arthur) 发送一个秘密消息。上一次我们在一起时,我们俩一致确定了一个秘钥:

$key = "dont-panic";

我想给他发一条短消息,只有该密钥才能解密。我将使用我最喜欢的行业标准的开源加密函数 openssl_encrypt() (Laravel的 Crypt 使用的就是这个)再加上我俩共同的 $key 进行文本加密的字符串发送给他:

$message = "So long and thanks for all the fish";$key = "dont-panic";$cipher = "AES-256-CBC";echo openssl_encrypt($message, $cipher, $key);// JJEK8L4G3BCfY0evXDRxUke2zqAzq6i7wL/Px4SjaEHXqt3x7hsj4+PhVQaH4ujX

我可以用任何方式将这个字符串发送给亚瑟;由于我们是仅有的两个拥有私钥的人,因此我不担心其他人会阅读该消息。

当 Arthur 收到时,他将使用我们的私钥解密此过程。这是其中的 对称 部分:我们能够加密和解密而不会丢失信息。

$secret = "JJEK8L4G3BCfY0evXDRxUke2zqAzq6i7wL/Px4SjaEHXqt3x7hsj4+PhVQaH4ujX";$key = "dont-panic";$cipher = "AES-256-CBC";echo openssl_decrypt($secret, $cipher, $key);// So long and thanks for all the fish

Laravel 使用 APP_KEY 作为加密密钥,对发送者和接收者的 cookie 使用相同的方法。使用相同的应用程序密钥对响应 cookie 进行加密,发送给用户,在接下来的请求中进行读取和解密。

单向哈希

我们的对称加密示例具有很多潜在的用途,但是所有这些都涉及最终需要解密被加密的消息。

但是,当涉及到诸如用户密码之类的东西时,您永远都不应有解密它们的方法。

这意味着我们的 Crypt 方法将无法使用,因此无法基于我们拥有的密钥。相反,我们需要一个 hashing 函数,它应该是:

  • 快速: 计算机应该能够快速生成哈希

  • 确定性: 散列相同的输入总是给出相同的输出

  • 随机性: 更改输入的单个字母应会彻底更改输出

  • 唯一: 冲突率(将不同的输入散列到相同的输出)应该很小

  • 难以暴力破解: 应该很难对所有可能的输入进行散列以猜测我们的原始输入

您可能已经熟悉许多单向哈希算法:MD5 和 SHA-1 可以快速计算,但不是最安全的(它们在上述第 4 和第 5 项上较弱)。

Laravel 散列实现了原生 PHP 的 password_hash() 函数,默认为一种称为 bcrypt 的散列算法。对于单向哈希来说,这是一个很好的默认值,您不需要更改它(尽管 Laravel 现在也提供了 一些其他 哈希方法。)

use Illuminate\Support\Facades\Hash;$password = "dont-panic";echo Hash::make($password);// $2y$10$hEEF0lv4spxnvw5O4XyLZ.QjCE1tCu8HjMpWhmCS89J0EcSW0XELu

如果您曾经查看过 users 表,则可能看起来很熟悉。这是什么意思:

  • $2y$ 使用 blowfish 算法进行哈希散列 (bcrypt)

  • 10$ “成本”因素(越高意味着要花更长的时间进行哈希)

  • hEEF0lv4spxnvw5O4XyLZ. 22位字符的 “salt”

  • QjCE1tCu8HjMpWhmCS89J0EcSW0XELu 哈希输出

由于这是单向哈希,因此我们 无法 对其进行解密。我们所能做的就是对它进行测试。

当使用此密码的用户尝试登录时,Laravel 会对其密码输入进行哈希处理,并使用 PHP 的 password_verify() 函数将新哈希与数据库哈希进行比较:

use Illuminate\Support\Facades\Hash;$input = request()->get('password'); // "dont-panic"$hash = '$2y$10$hEEF0lv4spxnvw5O4XyLZ.QjCE1tCu8HjMpWhmCS89J0EcSW0XELu';return Hash::check($input, $hash);// 正确

您会注意到,只有在需要对称(可逆)加密时,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

[jbathman my_app]# php artisan key:generate***************************************     Application In Production!     ***************************************Do you really wish to run this command? (yes/no) [no]:> yesApplication key [base64:x2SHH01+2R+vwv09YcrvXqdFJ+bbqgT9gW4njcYLjDE=] set successfully.

就是这样!如果要生成密钥而不修改您的 .env 文件,请包含 --show 标志:

[jbathman ~/my_app]# php artisan key:generate --showbase64:c3SzeMQZZHPT+eLQH6BnpDhw/uKH2N5zgM2x2a8qpcA=

到此,关于“Laravel中App_KEY的作用是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Laravel中App_KEY的作用是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Laravel中App_KEY的作用是什么

这篇文章主要介绍“Laravel中App_KEY的作用是什么”,在日常操作中,相信很多人在Laravel中App_KEY的作用是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Laravel中App_KEY
2023-07-04

laravel mix的作用是什么

这篇文章主要介绍“laravel mix的作用是什么”,在日常操作中,相信很多人在laravel mix的作用是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”laravel mix的作用是什么”的疑惑有所
2023-07-05

php中laravel框架的作用是什么

这期内容当中小编将会给大家带来有关php中laravel框架的作用是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。php有什么特点1、执行速度快。2、具有很好的开放性和可扩展性。3、PHP支持多种主流
2023-06-14

laravel门面的作用是什么

这篇文章主要为大家展示了“laravel门面的作用是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“laravel门面的作用是什么”这篇文章吧。在laravel中,门面Facades用于为应用
2023-06-29

laravel路由的作用是什么

今天小编给大家分享一下laravel路由的作用是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在laravel中,路由的
2023-06-30

laravel中的dingo有什么作用

这篇文章主要介绍“laravel中的dingo有什么作用”,在日常操作中,相信很多人在laravel中的dingo有什么作用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”laravel中的dingo有什么作用
2023-06-29

laravel中的make方法有什么作用

本文小编为大家详细介绍“laravel中的make方法有什么作用”,内容详细,步骤清晰,细节处理妥当,希望这篇“laravel中的make方法有什么作用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。在larave
2023-06-29

laravel中guard指的是什么

今天小编给大家分享一下laravel中guard指的是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在laravel中,
2023-06-30

laravel队列并发消费的作用是什么

Laravel队列并发消费的作用是提高任务处理的效率和速度。通过并发消费,可以同时处理多个队列任务,而不是顺序地一个一个处理。这样可以节省时间,并且能够更快地处理大量的任务。并发消费还可以提高系统的负载均衡能力。当系统面临高并发请求时,通过
2023-09-06

laravel中wherehas有什么作用

本篇内容主要讲解“laravel中wherehas有什么作用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“laravel中wherehas有什么作用”吧!在laravel中,wherehas基于
2023-07-01

laravel中artisan是什么

laravel中artisan是一个命令行工具。Artisan是Laravel框架的一部分,它允许开发者通过命令行界面执行各种操作,从创建数据库表到生成模型、控制器和视图等等。Artisan的一大优势是可以轻松地创建自定义命令,开发者可以通
2023-07-11

laravel中homestead指的是什么

今天小编给大家分享一下laravel中homestead指的是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。larave
2023-06-29

laravel中spark指的是什么

这篇文章主要介绍“laravel中spark指的是什么”,在日常操作中,相信很多人在laravel中spark指的是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”laravel中spark指的是什么”的疑
2023-06-29

laravel中lts指的是什么

这篇文章主要介绍“laravel中lts指的是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“laravel中lts指的是什么”文章能帮助大家解决问题。在laravel中,lts是长期技术支持的意
2023-06-30

Laravel中数据库迁移的操作方法是什么

这篇文章主要介绍了Laravel中数据库迁移的操作方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Laravel中数据库迁移的操作方法是什么文章都会有所收获,下面我们一起来看看吧。一:创建迁移在lara
2023-07-05

php laravel框架的工作流程是什么

PHP Laravel框架的工作流程如下:路由:请求到达服务器后,Laravel会根据路由配置文件(routes/web.php或routes/api.php)将请求路由到对应的控制器方法。控制器:控制器接收到请求后,会调用相应的业务逻辑处
2023-10-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录