Как расшифровать файлы cookie в Laravel 8

#php #encryption #laravel-8

#php #шифрование #laravel-8

Вопрос:

Недавно мы обновили наше приложение Laravel с версии 5.6 до версии Laravel 8.18.1. Мы используем расшифровку файлов cookie в RouteServiceProvider.php .

HomeController.php

Cookie::queue(«канал», «мобильный», 60 24 1); // зашифрованное значение канала = eyJpdiI6IjJVTGFzZHdEOXpjMk9VTGFFYmlSbXc9PSIsInZhbHVlIjoid0djMW9zbThWOXFQTk5aVXBDNmJBdz09IiwibWFjIjoiZGM4M2U1YTY0ZjVkNTE4NjBlNzg4NTZiNzhkNjdjYzcyODUzZWU1ZWMzNjdkNGNlMTgyZGIwNmQ4NjYzOWM3MSJ9

В Laravel 5.6 он расшифровывал хэш непосредственно как значение.

RouteServiceProvider.php

 $encrypter = app(IlluminateContractsEncryptionEncrypter::class);
$channel_cookie = $encrypter->decrypt(Cookie::get('channel')); // result "mobile"
 

В Laravel 8.18.1 он расшифровал хэш как значение с вертикальной чертой.

RouteServiceProvider.php

 $encrypter = app(IlluminateContractsEncryptionEncrypter::class);
$channel_cookie = $encrypter->decrypt(Cookie::get('channel')); // result "a86aa854d5e61e2873acd30373b6725e36fba671|mobile"
$channel_cookie = explode("|",$channel_cookie)[1]; // result mobile
 

Является ли это безопасным решением для расшифровки файлов cookie в Laravel 8?

Комментарии:

1. Вы узнали, как сделать это лучше? Это действительно странный способ расшифровки, но я тоже не могу найти другого решения.

Ответ №1:

Вы можете найти причину вашей проблемы в этом бюллетене по безопасности о префиксе файлов cookie в laravel.

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

Код, с помощью которого laravel выполняет эту операцию, находится в исходном файле framework, ссылка на который приведена ниже

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

В нашем сценарии мы реализовали нечто похожее на исходный код, в двух словах: имя файла cookie зашифровывается и добавляется к значению файла cookie с | разделением в виде символа.

Комментарии:

1. Это очень полезный контекст, но не отвечает на вопрос, заданный @xyonme. Есть ли какой-либо другой контекст о том, как удалить канал менее «взрывоопасным» способом?

2. Определенно есть API для удаления префикса: IlluminateCookieCookieValuePrefix::remove($decryptedCookie), но это предполагает, что вы сначала расшифровали файл cookie самостоятельно (отсюда и мой выбор имени переменной). Вместо этого вы можете позволить API расшифровать файл cookie и удалить для вас префикс: IlluminateSupport FacadesCookie::get($cookie), и вы увидите, что получите то же значение.