Secure Cookies: Руководство разработчика

Каждый 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 и создаю умных ИИ-агентов для автоматизации рутины.

Related Post

Верстка блока сервисного обслуживания с проверкой статуса заявки по номеру договораВерстка блока сервисного обслуживания с проверкой статуса заявки по номеру договора

Профессиональный frontend-инжиниринг и адаптивная верстка макетов под 1С-Битрикс являются ключевыми факторами высокой конверсии и удержания покупателей. Услуга «Верстка блока сервисного обслуживания с проверкой статуса заявки по номеру договора» обеспечивает быстрый

Удалить привязку элемента корзины к оплате sale.paymentitembasket.deleteУдалить привязку элемента корзины к оплате sale.paymentitembasket.delete

При разработке и поддержке проектов на платформе 1С-Битрикс критически важно использовать современные стандарты D7 API. В этом руководстве мы детально изучим тему «Удалить привязку элемента корзины к оплате sale.paymentitembasket.delete», разберем

Редизайн промо-страниц акций и спецпредложений интернет-магазинаРедизайн промо-страниц акций и спецпредложений интернет-магазина

Миграция сайта на платформу 1С-Битрикс или комплексный редизайн интерфейса — это стратегический шаг для устранения технических ограничений, защиты от санкционных рисков и масштабирования онлайн-продаж. Услуга «Редизайн промо-страниц акций и спецпредложений