如何在 Laravel 8 中解密 cookie
Posted
技术标签:
【中文标题】如何在 Laravel 8 中解密 cookie【英文标题】:How to decrypt cookies in Laravel 8 【发布时间】:2021-03-22 14:49:42 【问题描述】:最近,我们将 Laravel 应用程序从 5.6 升级到了 Laravel 8.18.1。我们在RouteServiceProvider.php中使用cookie解密。
HomeController.php
Cookie::queue("channel", "mobile", 60241); // 通道加密 价值 = eyJpdiI6IjJVTGFzZHdEOXpjMk9VTGFFYmlSbXc9PSIsInZhbHVlIjoid0djMW9zbThWOXFQTk5aVXBDNmJBdz09IiwibWFjIjoiZGM4M2U1YTY0ZjVkNTE4NjBlNzg4NTZiNzhkNjdjYzcyODUzZWU1ZWMzNjdkNGNlMTgyZGIwNmQ4NjYzOWM3MSJ9 P>
在 Laravel 5.6 中,它直接将哈希解密为一个值。
RouteServiceProvider.php
$encrypter = app(\Illuminate\Contracts\Encryption\Encrypter::class);
$channel_cookie = $encrypter->decrypt(Cookie::get('channel')); // result "mobile"
在 Laravel 8.18.1 中,它将哈希解密为带有竖线的值。
RouteServiceProvider.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
这是在 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 值中,|
作为分隔符。
【讨论】:
这是非常有用的上下文,但没有回答@xyonme 提出的问题。还有其他关于如何以不那么“爆炸性”的方式移除管道的上下文吗? 肯定有一个用于删除前缀的 API:\Illuminate\Cookie\CookieValuePrefix::remove($decryptedCookie),但假设你已经自己解密了 cookie(因此我选择了变量名) .相反,您可以让 API 解密 cookie 并为您删除前缀:\Illuminate\Support\Facades\Cookie::get($cookie),您将看到您将获得相同的值。以上是关于如何在 Laravel 8 中解密 cookie的主要内容,如果未能解决你的问题,请参考以下文章
如何删除 cookie 数组 Laravel 8 中的特定值
如何在 Laravel Lumen 8 中设置响应的 cookie
给定会话密钥和秘密,我们如何解密 Rails cookie?