im · Веб-мессенджер 26.700.0 Безопасность

im 26.700.0: гостевой доступ переписан с нуля — REST-метод joinByCode удалён

4 мин чтения Устаревших API: 1

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

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

Вход гостя в чат по ссылке перестал быть «REST-методом плюс правилом в urlrewrite» и стал полноценной областью авторизации на уровне ядра. Заодно у гостевых ссылок появился срок жизни, а у неактивных гостей — агент очистки. Если вы что-то строили поверх гостевых чатов, этот релиз ломающий.

Что было и что стало

Раньше схема выглядела так: установщик модуля прописывал в urlrewrite правило /guest/{code} → /guest/index.php, ставил шаблон im_guest и права на каталог, а вход выполнялся REST-методом im.v2.Guest.joinByCode.

Теперь:

  • REST-метод joinByCode удалён, вместо него im.v2.Guest.checkSession — checkSessionAction(string $code, ?Token $token = null). Разница принципиальная: раньше вызов по коду создавал гостя, теперь проверяется существующая сессия.
  • Появилась страница Guest\Controller\Page::viewAction(string $code) со своим шаблоном.
  • Установщик больше не трогает urlrewrite, шаблон im_guest и права на /guest/. В коде оставлен комментарий: при установленном intranet маршрут /guest/ здесь больше не описывается. Из im.router/class.php снята обработка GUEST_PATH.

GuestApplication: гостя заперли в собственной области

Ключевое — новый Guest\Auth\GuestApplication (приложение авторизации main, ID im_guest), подписанный на onApplicationsBuildList и onApplicationScopeError. Он ограничивает сессию гостя списком физических скриптов: /guest/, /bitrix/routing_index.php, /rest/, /bitrix/services/main/ajax.php и ещё несколько служебных. Всё, что вне списка, приводит к main:onApplicationScopeError, а пролог отвечает 403.

Зачем понадобилось отдельное приложение, объясняет комментарий в самом классе: архитектурно это копия Intranet\PublicApplication, но со своей областью — чтобы более широкий public-список (лайвчат, видеоконференции, платёжные коллбэки) не протекал на гостей. То есть до этого гость, вошедший по ссылке в чат, жил в общей публичной области с доступом к сценариям, к которым его не звали.

Там же — поучительная деталь про сопровождение таких списков. В allowlist явно внесены /bitrix/tools/conversion/ и /bitrix/tools/public_session.php, потому что шаблон Битрикс24 сам дёргает их сразу после загрузки гостевой страницы (счётчик и продление сессии). Без этого проверка области падала на хите счётчика, срабатывал Logout() с regenerateId(), гостевая сессия умирала посреди пачки AJAX-запросов, и наружу это выглядело как плавающие 401/500 и «Could not start session by PHP».

Ссылки с истечением и уборка гостей

  • SharingLink\Dto\CreateDto::initForGuestChat* и GuestInviteService::inviteByEmail() / inviteByPhone() получили опциональный ?DateTime $dateExpire = null. Гостевая ссылка теперь может протухать.
  • CleanupService::cleanInactiveGuestsAgent() — агент с интервалом 60 секунд, чистит неактивных гостей пачками и сам подстраивает период по тому, был ли батч полным.
  • AuthorizationService научился invalidateGuestUser(), terminate(), setInviteCode(); появился pull-событие Guest\Pull\UserLogout.

Общая мысль релиза: гостевая учётка перестала быть вечной.

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

  • im.v2.Guest.joinByCode — метода нет. Внешние интеграции, которые им пользовались, встанут.
  • CopilotTitle::sendPush() → sendPush(Chat $chat), аргумент обязательный.
  • GuestLinkService::getOrCreateLink(Chat $chat, int $authorId, bool $withMessage = true) — параметр $withMessage удалён.
  • Features::__construct — в конец добавлен bool $isCopilotDraftChatAvailable. Позиционная сборка Features ломается.
  • Установка модуля больше не создаёт правило urlrewrite для /guest/. Если вы полагались на него в своих маршрутах — проверьте.

Совместимо: Features::isChatWithGuestsAvailable(?int $inviterId = null), CopilotChat::sendBanner() (?bool $isUpdate → bool $isUpdate = false), новые поля manageMessagesAutoDelete и manageGuestInvites в ChatCreateFields.

Черновик чата с Копилотом

Отдельная небольшая история: Chat\Copilot\DraftChatService, экшен Controller\Copilot\DraftChat::getAction и методы CopilotChat::isDraftChat(), activateDraftChat(), activateDraftIfNeeded().

Логика — чат заводится как черновик и активируется только при первом реальном сообщении. Пользователь открыл Копилота, передумал и закрыл — в списке чатов ничего не осталось. Без этого каждое открытие плодило бы пустой чат.

Что делать

  1. Найдите в интеграциях im.v2.Guest.joinByCode — переезжать на checkSession.
  2. Проверьте позиционные вызовы Features, sendPush, getOrCreateLink.
  3. Если у вас свой шаблон или права на /guest/ — они больше не ставятся установщиком.
  4. Учтите срок жизни гостевых ссылок при выдаче: теперь их можно (и стоит) ограничивать.

Устаревшие и удалённые API в этой версии

Символ Статус Чем заменять
im.v2.Guest.joinByCode Удалено im.v2.Guest.checkSession

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

im 26.900.0 Ломающее Свежее

im 26.900.0 + socialnetwork 26.150.0: инициатор в событиях внешних чатов и установщик на миграциях

В im 26.900.0 папки чатов научились работать с dialogId, мобильная синхронизация узнаёт об уволенных сотрудниках, у чата появился бэкенд навигации по датам, а установщик модуля переехал с SQL-файлов на `UpdateSystem\Migration`. Ломаются конструкторы десяти событий внешних чатов, несколько флагов в `...

1 мин
im 26.800.0 Заметное

im 26.800.0 + socialnetwork 26.100.0: чаты крепятся к проекту, markdown в сообщениях, учёт входов по ссылке

Большой парный релиз: `im` и `socialnetwork` едут одним батчем, потому что делают одну вещь — сращивают чаты с проектами. Чат теперь можно прикрепить к проекту как дочерний, лента знает о своих IM-сообщениях, а прочтение в одном месте гасит счётчик в другом. Плюс markdown и учёт участников шаринг-сс...

5 мин
voximplant 26.700.0 Ломающее Свежее

Voximplant 26.700.0: оценку качества связи убрали, у notifyAdmins() появился тип

Модуль телефонии voximplant 26.700.0 вышел в коробочный Битрикс24 11 сентября 2026 года, по данным официального канала «Битрикс24 changelog». Из карточки звонка убрали оценку качества связи вместе с её JS-событиями, у `Im::notifyAdmins()` появился тип параметра, а публичные константы `SipStatusInfor...

3 мин
ui 26.687.0 Рутинное Свежее

UI 26.687.0: триал VibePlus в облаке и дизайн чипа TintedBitrixGpt

`Bitrix\UI\Controller\InfoHelper` при активации демо сначала спрашивает у модуля bitrix24, включён ли старт VibePlus, и если да, запускает триал VibePlus вместо обычного демо тарифа. Ветка срабатывает только при подключённом модуле bitrix24 и определённой константе `BX24_HOST_NAME`. В `ui.system.chi...

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

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

на связи

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

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

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

Войти