sender · Email-маркетинг 26.300.0 Безопасность

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

4 мин чтения
Узнавайте о ломающих изменениях Битрикса раньше, чем они доедут до прода: свежие разборы — в канале @bxmax_updates

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

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

Главное в этом релизе — не новые классы, а два фильтра. 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(), а не на константы кодов.

Новая версия вышла — разбор уже в Telegram

В канале @bxmax_updates публикуем каждый свежий разбор: что сломается, что устарело и что появилось в API. Узнаете до того, как обновите прод.

Подписаться

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

sender 26.400.0 Ломающее Свежее

Sender 26.400.0: снимки сегментов, Feedback-ID и несовместимые изменения API

Sender 26.400.0 переносит сбор получателей плановой рассылки на момент старта, добавляет управляемые снимки сегментов и связывает почтовый транспорт с identity отправителя. Перед обновлением проверьте вызовы `SegmentDataBuilder`, обработчики `OnBeforePostingSendRecipient`, старый AJAX загрузки шабло…

5 мин
voximplant 26.900.0 Заметное Свежее

Voximplant 26.900.0: подписанные параметры экспорта статистики

Voximplant 26.900.0 подписывает имя компонента при экспорте детализации статистики. Обновление также исправляет REST-сценарии, отметку пропущенного переадресованного звонка и чтение настроек прокси.

1 мин
superset 26.700.0 Заметное Свежее

Superset 26.700.0: пользовательский контекст и проверяемый act-as

Версия 26.700.0 добавляет пользовательский контекст Superset в публичные провайдеры и команды. Проверяемый act-as для SQL Lab включается явно, поэтому существующие вызовы продолжают работать по-прежнему. Все новые параметры необязательны, прежние значения по умолчанию сохранены.

2 мин
sign 26.1200.0 Ломающее Свежее

Sign 26.1200.0: автоопределение бланков и удаление CRM API

Sign 26.1200.0 упрощает загрузку документов КЭДО, добавляет списки сотрудников в робот и обновляет «Мой сейф» без перезагрузки страницы. Перед обновлением проверьте интеграции с CRM и сервисом бланков: четыре публичные точки API удалены, а `CRM::saveCompanyStamp()` сменил тип результата.

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

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

на связи

пишет…

Можно закрыть чат и перейти на другую страницу. Когда ответ будет готов, на кнопке Домового появится отметка.

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

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

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

Войти