Документация ПрофиCRM: Маркетинговые рассылки
Инструкция по обновлению для безопасности до версии 3.7.6
Если на сайте установлена версия модуля ниже 3.7.6, рекомендуем установить обновление через Bitrix Marketplace.
Если обновление временно недоступно из-за срока обновлений, локальных доработок или ограничений проекта, разработчик может сверить и обновить затронутые участки по инструкции ниже.
Перед внесением правок
- Проверьте, есть ли локальные доработки в файлах модуля.
- Сравнивайте не только отдельную строку, но и окружающий участок кода.
- Вносите изменения сначала на тестовой копии сайта.
- После внесения правок очистите кеш Bitrix и проверьте основные сценарии модуля.
Карта правок для разработчика
Откройте файл, найдите указанный фрагмент и замените его на безопасный вариант из соседней колонки.
Обработка шаблонов
Файл: admin/sotbit_mailing_template_ajax.php
Что сделать: проверить права доступа, привести входные ID к числу, добавить безопасную обработку сериализованных данных и разрешить подключение preset только по безопасному имени.
| Найти | Заменить |
|---|---|
Примерно строки 1-9: начало обработчика, где подключается административный пролог и проверяются права. |
Примерно строки 1-9: подключить модуль и проверить права пользователя. |
Примерно строки 14-15: получение события и параметров шаблона. |
Примерно строки 14-15: привести ID к числу, параметры читать с ограничением классов. |
Примерно строки 21-22: получение шаблона по ID. |
Примерно строки 21-22: передать в метод числовой ID. |
Примерно строки 34-36: подключение preset-файла. |
Примерно строки 34-36: перед подключением разрешить только безопасное имя preset. |
Примерно строки 37-62: получение сообщения и параметров сообщения. |
Примерно строки 37-62: привести message_id к числу, параметры читать с ограничением классов. |
Запуск и остановка рассылки
Файл: admin/sotbit_mailing_start_ajax.php
Что сделать: добавить проверку сессии Bitrix после проверки прав и до действий, которые запускают или останавливают рассылку.
| Найти | Заменить |
|---|---|
Примерно строки 8-20: после проверки прав начинается обработка запуска или остановки. |
Примерно строки 8-20: перед действием добавить проверку сессии Bitrix. |
Список рассылок
Файл: admin/sotbit_mailing_list.php
Что сделать: привести входные значения к безопасному типу и экранировать значения перед выводом в HTML и JavaScript.
| Найти | Заменить |
|---|---|
Примерно строки 129-132: получение parent из запроса. |
Примерно строки 129-132: хранить parent как числовое значение. |
Примерно строки 551-552: сборка ссылок редактирования и копирования. |
Примерно строки 551-552: ограничить тип, привести ID к числу, шаблон передать через urlencode. |
Примерно строки 567-571: вывод названия в HTML. |
Примерно строки 567-571: экранировать значение перед выводом. |
Примерно строка 612: вывод описания в textarea. |
Примерно строка 612: подготовить имя поля и экранировать описание. |
Примерно строки 723 и 736: передача имени шаблона в JavaScript-переход. |
Примерно строки 723 и 736: подготовить значение для URL и JavaScript-контекста. |
Примерно строка 883: скрытое поле parent. |
Примерно строка 883: использовать подготовленный parentID. |
Переходы и сохраненные параметры
Файл: classes/general/CSotbitMailingHelp.php
Что сделать: привести ID к числу, добавить безопасную обработку сериализованных данных, заменить прямые переходы на проверенный helper и добавить безопасное чтение массивов.
| Найти | Заменить |
|---|---|
Примерно строки 1617-1719: получение и обновление сообщения по ID из запроса. |
Примерно строки 1617-1719: использовать числовой ID при чтении и обновлении. |
Примерно строки 1650-1654: чтение сохраненных статистических массивов. |
Примерно строки 1650-1654: читать массивы с ограничением классов. |
Примерно строки 1719 и 1730: переход по URL из обработчика. |
Примерно строки 1719 и 1730: передать URL через helper, который проверяет значение перед переходом. |
Примерно строки 1902-1933: отдельного helper для проверенного перехода не было. |
Примерно строки 1902-1933: добавить helper, который проверяет URL и связь с сообщением перед переходом. |
Примерно строки 92, 1552, 1578: чтение сохраненных параметров события, шаблона и настроек. |
Примерно строки 92, 1552, 1578: ограничить чтение сериализованных параметров. |
Примерно строки 1935-1945: единый helper для чтения массивов. |
Примерно строки 1935-1945: добавить helper для JSON и serialized arrays. |
Статистика открытия письма
Файл: admin/sotbit_mailing_img.php
Что сделать: безопасно читать сохраненный массив дат открытия письма.
| Найти | Заменить |
|---|---|
Примерно строка 27: чтение массива дат открытия. |
Примерно строка 27: читать массив с ограничением классов. |
Основная логика отправки
Файл: include.php
Что сделать: во всех местах чтения сохраненных параметров рассылки и сообщения ограничить десериализацию.
| Найти | Заменить |
|---|---|
Примерно строки 123-132: параметры шаблона и исключения подписчиков. |
Примерно строки 123-132: читать параметры с ограничением классов. |
Примерно строки 226 и 416: параметры рассылки и сообщения перед отправкой. |
Примерно строки 226 и 416: использовать безопасное чтение массивов. |
Примерно строки 631, 648 и 700: параметры активных шаблонов и сообщений. |
Примерно строки 631, 648 и 700: читать только массивы без создания классов. |
Подписчики и настройки
Файлы: classes/general/CsotbitMailingSubTools.php, classes/general/CModuleOptions.php
Что сделать: подготовить значения из cookies, безопасно читать настройки категорий и использовать штатную генерацию случайной строки.
| Найти | Заменить |
|---|---|
Примерно строки 10-13: значение страницы перехода из cookies. |
Примерно строки 10-13: подготовить значение перед сохранением. |
Примерно строки 52-53: группы и списки подписок категории. |
Примерно строки 52-53: читать массивы с ограничением классов. |
Примерно строка 126: генерация пароля для нового пользователя. |
Примерно строка 126: использовать штатный генератор случайной строки. |
Примерно строка 97 в CModuleOptions.php: чтение множественной настройки. |
Примерно строка 97 в CModuleOptions.php: читать настройку с ограничением классов. |
AJAX формы подписки
Файлы: install/components/sotbit/sotbit.mailing.email.get/templates/.default/ajax.php, field/ajax.php, popup_click/ajax.php, popup_time/ajax.php
Что сделать: принимать отправку только POST-запросом, проверять сессию Bitrix и приводить входные значения к ожидаемому формату.
| Найти | Заменить |
|---|---|
Примерно строки 12-20 в ajax.php: обработка отправки формы через REQUEST. |
Примерно строки 12-25 в ajax.php: принимать POST, проверить sessid и подготовить email. |
Примерно строки 20-30 в ajax.php: категории передаются как есть. |
Примерно строки 24-28 в ajax.php: привести ID категорий к числам. |
Шаблоны форм подписки
Файлы: install/components/sotbit/sotbit.mailing.email.get/templates/.default/template.php, field/template.php, popup_click/template.php, popup_time/template.php
Что сделать: экранировать текстовые параметры, передавать параметры в JavaScript через штатные функции, добавлять sessid в AJAX-запрос и проверять цвета по формату.
| Найти | Заменить |
|---|---|
Примерно первые строки template.php: вывод текста и email в HTML. |
Экранировать текст и значение поля перед выводом. |
Примерно блок JavaScript: параметры передаются строкой, sessid не добавляется. |
Передать параметры через JS-объект и добавить sessid в запрос. |
Примерно блок успешной отправки: текст вставляется как HTML. |
Выводить текст как текстовое значение и подготовить для JS. |
Примерно блок CSS: цветовые параметры выводятся напрямую. |
Проверить цвет по формату и использовать значение по умолчанию. |
Проверка после правок
| Что проверить | Ожидаемый результат |
|---|---|
| Настройки модуля и права доступа | Административные страницы открываются только пользователям с нужными правами. |
| Сценарии рассылок и карточка сценария | Сценарии открываются, сохраняются и не теряют параметры. |
| Шаблон письма и предпросмотр | Шаблон загружается из допустимого preset или из сохраненного шаблона, предпросмотр отображается корректно. |
| Статистика и графики | Страница статистики открывается, значения отображаются без ошибок JavaScript. |
| Формы подписки и AJAX | Форма принимает корректные данные, отклоняет некорректные и показывает штатное сообщение. |
| Редиректы из писем | Разрешенные ссылки открываются, некорректные значения не приводят к переходу. |
