Анализ механизма обновления CSRF-токена и оценка его безопасности
В процессе изучения работы метода BX.ajax.runAction был выявлен механизм обработки недействительных CSRF-токенов. Система использует поле error.customData.csrf для автоматического получения нового токена при обнаружении ошибки типа invalid_csrf.
Исходная реализация обработки
В оригинальном коде реализована следующая логика:
- При получении ошибки
invalid_csrfпроверяется наличиеerror.customData.csrf - Новый токен сохраняется в
BX.messageпод ключомbitrix_sessid - Заголовок
X-Bitrix-Csrf-Tokenобновляется в конфигурации запроса - Запрос повторяется с обновленными данными
Воспроизведенная реализация
На основе этого механизма была создана аналогичная функция:
- Формирование FormData из переданных параметров
- Выполнение POST-запроса к
/bitrix/services/main/ajax.php - Анализ ответа на наличие ошибки
invalid_csrf - Рекурсивный повтор запроса с новым CSRF-токеном при необходимости
- Возврат результата или обработка ошибки
Вопрос безопасности
Ключевой вопрос заключается в том, не создает ли использование error.customData.csrf уязвимостей в системе безопасности. Этот механизм предполагает, что сервер доверяет клиенту и предоставляет новый валидный токен в ответ на недействительный, что требует тщательной оценки с точки зрения защиты от CSRF-атак.