intranet 26.1750.0 Безопасность

Intranet 26.1750.0: приглашения в коллабы проверяются по каждому условию, отказы получили коды COLLAB_INVITE_*

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

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

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

Intranet 26.1750.0 вышел для коробочного Битрикс24 (в БУС этого модуля нет) вместе с im 26.1150.0 и socialnetwork 26.275.0, во всех трёх есть правки коллаб. Префильтр приглашений в коллабу из-за && в условии отказывал, только когда проваливались сразу три проверки, а теперь каждая проверка отказывает сама и отдаёт машиночитаемый код. Администратору стоит обновиться, а тому, кто вызывает приглашения из своего кода, проверить обработку отказов.

Новое

Разбирайте отказ по коду

Префильтр InviteToCollabAccessControl стоит на трёх действиях контроллера Bitrix\Intranet\Controller\Invite: intranet.invite.inviteUsersToCollab, intranet.invite.getLinkByCollabId и intranet.invite.regenerateLinkByCollabId. У его ошибок появились коды, в порядке проверки:

  • COLLAB_INVITE_MODULES_UNAVAILABLE: не установлен socialnetwork, extranet или другой обязательный модуль коллаб;
  • COLLAB_INVITE_PORTAL_DISABLED: выключена настройка «Разрешить приглашать внешних пользователей в коллабы» или инструмент «Коллабы»;
  • COLLAB_INVITE_ACCESS_DENIED: у пользователя нет права приглашать в эту коллабу;
  • COLLAB_INVITE_TECHNICAL_DISABLED: коллабы выключены технически (CollabFeature::isOn());
  • COLLAB_INVITE_FEATURE_UNAVAILABLE: коллабы недоступны по тарифу;
  • COLLAB_INVITE_EXTRANET_NOT_CONFIGURED: не настроен экстранет-сайт;
  • COLLAB_INVITE_GROUP_DISABLED: владелец коллабы запретил приглашать гостей.

Без кода остались два отказа, 'Collab ID is not specified.' и «Коллаба не найдена». Сравнивать текст бесполезно, потому что MODULES_UNAVAILABLE, TECHNICAL_DISABLED и FEATURE_UNAVAILABLE отдают одну и ту же фразу INTRANET_COLLAB_ACCESS_CONTROL_PORTAL_ACCESS_DENIED. При ошибке копирования или перевыпуска ссылки мессенджер с im 26.1150.0 показывает серверный текст только для кодов из этого списка, на остальные выводит общую ошибку. В своём интерфейсе можно так же: на известный код показать свою подсказку, на остальные COLLAB_INVITE_* серверный текст, а перед вставкой в HTML его экранировать.

        const hints = {
	COLLAB_INVITE_ACCESS_DENIED: 'Попросите владельца коллабы дать вам право приглашать',
	COLLAB_INVITE_EXTRANET_NOT_CONFIGURED: 'Экстранет не настроен, напишите администратору',
};

BX.ajax.runAction('intranet.invite.getLinkByCollabId', { data: { collabId } })
	.then((response) => showInviteLink(response.data))
	.catch((response) => {
		const error = response.errors?.[0] ?? {};
		const isInviteCode = String(error.code ?? '').startsWith('COLLAB_INVITE_');
		const text = hints[error.code] ?? (isInviteCode ? error.message : 'Не удалось получить ссылку');

		BX.UI.Notification.Center.notify({ content: BX.Text.encode(text) });
	});

    

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

Интеграции получат отказ там, где раньше проходили

Раньше портальная проверка выглядела так: !isOn() && !isFeatureEnabled() && !Requirement::check()->isSuccess(). Хватало одного выполненного условия, чтобы запрос прошёл. В коробке нет модуля bitrix24, поэтому CollabFeature::isFeatureEnabled() там всегда возвращает true, и условие не могло сработать. По той же причине COLLAB_INVITE_FEATURE_UNAVAILABLE коробка не увидит, это код облака.

После обновления эти три действия, в том числе вызванные из вашего кода, откажут на порталах, где коллабы выключены технически или по тарифу, где не настроен экстранет-сайт или не установлен обязательный модуль. Раньше без модуля extranet пропускалась и проверка настройки «Разрешить приглашать внешних пользователей в коллабы».

Порядок проверок тоже другой. Сначала префильтр смотрит право приглашать, потом включены ли коллабы, поэтому пользователь без прав на портале, где коллабы выключены технически или по тарифу, получит COLLAB_INVITE_ACCESS_DENIED. Запрет гостей владельцем коллабы проверяется последним.

Что закрыли

Поле приглашения intranet.invitation-input раньше вставляло серверное сообщение об ошибке в шаблон Tag.render как есть, теперь оно проходит через Text.encode. Обработчик ошибки читает response?.errors?.[0]?.message. До этого при пустом errors он падал на response.errors[0].message и до reject не доходил. Если сервер не вернул сообщения, поле покажет «Не удалось отправить приглашение, попробуйте ещё раз».

Мелочи и находки

  • Фразу «Не удалось отправить приглашение...» расширение берёт из lang-файла контроллера: config.php вызывает IncludeModuleLangFile($path, Loc::getCurrentLang(), true), получает массив фраз и кладёт нужную в lang_additional. Так JS-расширение может взять фразу из чужого lang-файла и не дублировать ключ.
  • В ru-тексте INTRANET_COLLAB_ACCESS_CONTROL_PORTAL_ACCESS_DENIED осталась опечатка «фозможности», хотя файл в релизе правили.
  • Прошлые правки приглашений в коллабы, например перевыпуск ссылки только владельцем, разобраны в intranet 26.1400.0–26.1700.0.

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

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

Подписаться

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

intranet 26.1900.0 Безопасность Свежее

Intranet 26.1775.0–26.1900.0: белый список SharePoint и лимит повторных приглашений

Intranet 26.1775.0 и 26.1900.0 меняют приглашения в коллабы и исходящие запросы к SharePoint. Для синхронизации теперь нужен белый список серверов, а повторные письма ограничены интервалом. В портале появились страницы офисов и публичной базы знаний; разработчикам доступны команды перевода сотрудник…

5 мин
intranet 26.1700.0 Безопасность Свежее

Intranet 26.1400.0–26.1700.0: закрыты дыры в приглашениях и чатах групп, удалены intranet.backup и intranet.configs

В коробочный Битрикс24 подряд вышли пять версий intranet: 26.1400.0, 26.1475.0, 26.1500.0, 26.1600.0 и 26.1700.0. Администратору стоит обновиться ради безопасности: закрыты подстановка кода в строки агентов, доступ к чужим чатам рабочих групп, приглашение в чужие отделы и обход проверки прав в `shar…

1 мин
tasks 26.800.0 Ломающее Свежее

Tasks 26.700.0–26.800.0: роботы с проверкой прав, чек-листы и новая длительность в REST

Tasks 26.700.0, 26.750.0 и 26.800.0 добавляют сортировку канбана, несколько чек-листов в действии создания задачи и робот «Добавить результат». Интеграциям потребуется проверить плановую длительность в REST, собственные действия БП и обработчики скрама. Роботы теперь проверяют права автора, а REST о…

5 мин
stafftrack 26.500.0 Ломающее Свежее

Stafftrack 26.400.0–26.500.0: офисы с геозонами и новые правила приёма чекинов

В Stafftrack 26.400.0 и 26.500.0 появился справочник офисов с геозонами, фотографиями и сигналами присутствия сотрудников. Одновременно изменились правила приёма точек маршрута и исчезли два публичных сервисных класса. Интеграциям, которые отправляют накопленные чекины или вызывают эти сервисы, потр…

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

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

на связи

пишет…

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

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

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

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

Войти