Документация ПрофиCRM: Маркетинговые рассылки. Инструкция по обновлению для безопасности до версии 3.7.6
Инструкция по обновлению для безопасности до версии 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 | Форма принимает корректные данные, отклоняет некорректные и показывает штатное сообщение. |
| Редиректы из писем | Разрешенные ссылки открываются, некорректные значения не приводят к переходу. |
