#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), и вы увидите, что получите то же значение.