sender · sender 26.300.0 Безопасность

sender 26.300.0: тестер писем больше не пускает произвольные ключи в компилятор

4 мин чтения

Обновление безопасности

Закрыта уязвимость или ослабленная проверка прав. Ставить в первую очередь.

Главное в этом релизе — не новые классы, а два фильтра. AJAX тестовой отправки письма перестал складывать в конфигурацию сообщения всё, что пришло в запросе, а редирект по ссылке из рассылки перестал таскать внутренний параметр на внешние домены. Обе правки маленькие, обе — про то, что раньше можно было сделать с портала снаружи.

Тестер писем: array_intersect_key вместо доверия запросу

В sender.message.tester/ajax.php данные из клиентского запроса уходили в setConfigurationData() целиком. Конфигурация сообщения — это то, из чего собирается письмо, и часть её ключей интерпретируется как код. Комментарий, который разработчики оставили в новом коде, называет вещи своими именами: ключи вроде BODY_PHP не должны попадать в компилятор писем из клиентского запроса.

Теперь перед передачей стоит белый список:

        $letter->getMessage()->setConfigurationData(
    array_intersect_key($messageData, $allowedOptionCodes)
);

    

Всё, чего нет среди кодов опций конфигурации, отбрасывается. Если вы держите sender на портале с доступом у нескольких сотрудников — это обновление стоит поставить не откладывая.

Conversion-параметр перестал утекать на внешние домены

Новый класс Bitrix\Sender\Internals\ExternalUrlSanitizer вешается на событие main:OnMailEventMailClickRedirect и снимает query-параметр bx_sender_conversion_id с URL, если редирект ведёт на внешний хост. Внутри портала параметр нужен — по нему считается конверсия. За его пределами это просто идентификатор из вашей рассылки, который уезжает в чужую аналитику и реферер.

Отдельно стоит посмотреть, как санитайзер определяет «свой» домен: он берёт BX24_HOST_NAME, опцию main.server_name и SiteDomainTable — и не смотрит в HTTP_HOST. Это защита от подмены заголовка Host: иначе достаточно было бы прислать чужой Host, чтобы внешняя ссылка считалась своей и параметр уехал вместе с переходом.

Заодно литерал bx_sender_conversion_id из ConversionHandler::onBeforeProlog() заменён на константу ExternalUrlSanitizer::CONVERSION_PARAM — теперь имя параметра в одном месте.

Что сломается

  • Bitrix\Sender\SenderNotifySchema. Схема IM-уведомлений обёрнута в ключи NAME и NOTIFY; раньше group_prepared лежал прямо под sender. Если вы разбирали эту схему или дополняли её своими типами — путь изменился.
  • VK-реклама режется по региону. TransportVk и TransportLookalikeVk попадают в список транспортов только при Bitrix24\Service::isAdVisibleInRegion(), а Message\Adapter::isAvailable() для кодов CODE_ADS_VK / CODE_ADS_LOOKALIKE_VK возвращает false там, где регион эти объявления скрывает. Код, который жёстко предполагал наличие VK-транспорта, получит пустоту вместо ошибки — проверяйте isAvailable().
  • Тестер писем может начать «терять» ключи, если вы дописывали в него свои — теперь они должны быть зарегистрированы как коды опций конфигурации.

Установщик переехал на миграции

InstallDB / UnInstallDB больше не гоняют SQL-батчи: удалены install/db/{mysql,pgsql}/install.sql, install_ft.sql, uninstall.sql, а схема описана в install/migrations/tables.php (включая fulltext-индекс IXF_B_SENDER_MAILING_CHAIN_1 на SEARCH_CONTENT). События — в events.php, агент AccessInstaller::installAgent() и степпер SetFileInfoStepper — в agents.php.

Новых таблиц и полей в релизе нет: схема переехала один в один. На работающем портале мигрировать нечего. Подробнее про механику — в отдельном разборе UpdateSystem\Migration.

Что делать

  1. Обновиться, если sender используется — из-за фильтра тестера.
  2. Проверить свой код на разбор SenderNotifySchema.
  3. Если строите список каналов рассылки динамически — опираться на Adapter::isAvailable(), а не на константы кодов.

Читайте дальше

calendar 25.195.0 Заметное Свежее

calendar 25.195.0: активность БП считает минуты встреч и перестала терять последний день

Точечный релиз вокруг одной активности бизнес-процессов — «Получить информацию из календаря». Она научилась отдавать списки заголовков и суммарные минуты встреч, а заодно у неё поправили границу выборки. Публичного PHP API релиз не меняет.

3 мин
calendar 25.197.0 Заметное Свежее

calendar 25.197.0: тип события call_sync и чат, который создаётся сам

У события календаря появился собственный тип, и первый его пользователь — синхронизированные созвоны: при создании такого события автоматически поднимается чат с гостевой ссылкой. Ломающих изменений нет, все правки сигнатур совместимы.

3 мин
bizprocdesigner 26.500.0 Заметное Свежее

bizprocdesigner 26.500.0: фильтр ноды приехал выключенным

Крупный UI-релиз редактора схем плюс новый тип конструкции — фильтр ноды. Ломающих изменений нет: все правки контроллера и DTO совместимы со старыми вызовами. Главное, что стоит знать заранее: фича спрятана за опцией и по умолчанию выключена.

3 мин
calendar 25.200.0 Ломающее Свежее

calendar 25.200.0: таймзона пользователя переехала в b_user.TIME_ZONE — и это ломающий релиз

Самый «ломающий» календарный релиз батча. Часовой пояс пользователя перестал быть настройкой календаря и стал полем пользователя, из-за чего у AJAX-экшена сохранения настроек изменилась сигнатура. Плюс вырезаны два метода `SynchronizationFeature`. Обновление стоит смотреть внимательно, если вы что-т...

4 мин
Мы используем файлы cookie для улучшения работы сайта. Продолжая использовать сайт, вы соглашаетесь с нашей политикой конфиденциальности.
AI Домовой

AI Домовой История

на связи

пишет…
Нет истории чатов
AI Домовой

Нужна авторизация

Войдите, чтобы задавать вопросы AI Домовому.

Войти