如何在 Laravel 8 中解密 cookie

xyo*_*nme 6 php encryption laravel-8

最近,我们将 Laravel 应用程序从 5.6 升级到 Laravel 8.18.1。我们在RouteServiceProvider.php中使用cookie解密。

HomeController.php

Cookie::queue("频道", "移动", 60 24 1); // 通道加密值 = eyJpdiI6IjJVTGFzZHdEOXpjMk9VTGFFYmlSbXc9PSIsInZhbHVlIjoid0djMW9zbThWOXFQTk5aVXBDNmJBdz09IiwibWFjIjoiZGM4M2U1YTY0ZjVkNTE4NjBlNzg4NTZiNzhkNjdjYzcyODU zZWU1ZWMzNjdkNGNlMTgyZGIwNmQ4NjYzOWM3MSJ9

在 Laravel 5.6 中,它直接将哈希值解密为值。

路由服务提供商.php

$encrypter = app(\Illuminate\Contracts\Encryption\Encrypter::class);
$channel_cookie = $encrypter->decrypt(Cookie::get('channel')); // result "mobile"
Run Code Online (Sandbox Code Playgroud)

在 Laravel 8.18.1 中,它将哈希值解密为带有竖线的值。

路由服务提供商.php

$encrypter = app(\Illuminate\Contracts\Encryption\Encrypter::class);
$channel_cookie = $encrypter->decrypt(Cookie::get('channel')); // result "a86aa854d5e61e2873acd30373b6725e36fba671|mobile"
$channel_cookie = explode("|",$channel_cookie)[1]; // result mobile
Run Code Online (Sandbox Code Playgroud)

这是在 Laravel 8 中解密 cookie 的安全解决方案吗?

小智 -1

您可以在有关在 laravel 中添加 cookie 前缀的安全公告中找到问题的原因。

https://blog.laravel.com/laravel-cookie-security-releases

laravel 执行此操作的代码位于下面链接的框架源文件中

https://github.com/laravel/framework/blob/8.x/src/Illuminate/Cookie/CookieValuePrefix.php

在我们的场景中,我们实现了与原始代码类似的东西,用两个词来说:cookie 名称被加密并使用|分隔符添加到 cookie 值中。