Каждый PHP-разработчик, работающий с экосистемой Bitrix Framework, должен глубоко понимать работу её ключевых компонентов. В этой статье мы проведем подробный аудит темы «Secure Cookies: Руководство разработчика», проанализируем лучшие практики и покажем, как правильно использовать secure cookies в реальных задачах.
—
title: Защищенные cookie
—
С версии 20.5.400 Главного модуля доступны защищенные cookie \Bitrix\Main\Web\CryptoCookie.
Защищенные cookie шифруют данные и делают их недоступными для чтения или изменения без ключа. В отличие от обычных cookie, которые хранят данные в открытом виде, защищенные cookie предотвращают перехват или изменение данных злоумышленниками.
Ключ crypto_key
Для работы защищенных cookie нужен ключ crypto_key. Он используется для шифрования данных. Ключ должен быть уникальным и криптостойким. Рекомендуем создавать ключ длиной 32 символа, состоящий из букв латинского алфавита и цифр.
Ключ хранится в файле /bitrix/.settings.php. В новых дистрибутивах ключ генерируется автоматически. Если ключа нет, добавьте его вручную. В разделе crypto передайте ключ crypto_key в массив value.
<?php
return [
//...
'crypto' => [
'value' => [
'crypto_key' => 'mysupersecretphrase',
],
'readonly' => true, // 'readonly' указывает, что значение 'crypto_key' нельзя изменить через интерфейс администратора. Это повышает безопасность: ключ остается постоянным и защищенным от случайных изменений
]
//...
];Как создать защищенную cookie
Чтобы создать защищенную cookie, используйте класс \Bitrix\Main\Web\CryptoCookie. Создайте объект $cookie и добавьте его в HTTP-ответ, чтобы браузер сохранил cookie.
$cookie = new \Bitrix\Main\Web\CryptoCookie('someName', 'secret value');
\Bitrix\Main\Context::getCurrent()->getResponse()->addCookie($cookie);В примере используются следующие методы:
-
CryptoCookie()создает зашифрованную cookie с параметрами:
-
someName— имя cookie, которое будет использоваться для доступа к ее значению,
-
secret value— значение, которое нужно сохранить в cookie и зашифровать перед отправкой,
-
getCurrent()возвращает объект с данными о текущем запросе и ответе,
-
getResponse()возвращает объект HTTP-ответа,
-
addCookie()добавляет созданную cookie в список всех cookie, которые будут отправлены браузеру.
Почему создаются несколько cookie
Значение cookie ограничено по длине. Зашифрованные данные кодируются в формат base64. Если объем данных превышает допустимый размер cookie, ядро автоматически разбивает их на несколько частей:
- первая cookie
someNameсодержит ссылку на другие части данных,
- остальные cookie (
someName_0,someName_1,someName_N) хранят зашифрованные фрагменты.
Как прочитать защищенную cookie
Чтобы получить расшифрованное значение cookie, используйте стандартный метод getCookie(). Метод автоматически определяет зашифрованную cookie и расшифровывает ее значение.
$httpRequest = \Bitrix\Main\Context::getCurrent()->getRequest();
echo $httpRequest->getCookie('someName'); //secret valueВ примере используются следующие методы:
-
getCurrent()возвращает объект с данными о текущем запросе и ответе,
-
getRequest()извлекает объект HTTP-запроса с данными от браузера,
-
getCookie('someName'):
- ищет cookie с именем
'someName',
- проверяет, является ли cookie зашифрованной,
- расшифровывает значение, если оно было зашифровано.
Причины ошибки при расшифровке cookie
Расшифровка может завершиться ошибкой, если:
- cookie была изменена или повреждена,
- есть проблемы с синхронизацией времени на серверах,
- используется неверный
crypto_key.
Чтобы избежать проблем, используйте один и тот же crypto_key на всех серверах вашего проекта.
💡 Экспертное мнение и рекомендации
Советы эксперта по интеграции:
- Всегда используйте кэширование при частых запросах к secure cookies, чтобы разгрузить базу данных.
- Соблюдайте стандарты PSR при написании обработчиков для «Secure Cookies: Руководство разработчика».
- Регулярно проводите аудит производительности системы с помощью встроенного монитора 1С-Битрикс.
Похожая задача в бизнесе?
Помогу автоматизировать процессы и внедрить ИИ
Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.
или на почту: gorandvas@yandex.ru