rest · REST API 26.500.0 Безопасность

rest 26.500.0: журнал аудита безопасности и курсорные ответы в V3

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

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

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

REST завёл единый журнал того, что происходит с приложениями, правами и вебхуками, а установщик переехал с SQL-батчей на миграции ядра. Публичные REST-методы не тронуты — ломается внутреннее и V3-API, так что читать этот разбор стоит тем, кто пишет свои модули поверх rest, а не тем, кто дёргает crm.deal.add.

SecurityAuditLogger: кто и что сделал с интеграциями

Новый Bitrix\Rest\Internal\Service\Security\SecurityAuditLogger пишет события установки и удаления приложений, смены прав доступа, запроса / подтверждения / отклонения scope, операций с вебхуками, действий системного пользователя и авторизаций.

Проблема, которую это закрывает, знакома любому, кто разбирал инцидент на большом портале: приложение с широкими правами стоит, вебхук существует, а кто, когда и с какими правами их завёл — восстанавливается по косвенным признакам. Теперь у этих действий есть общий журнал.

Класс лежит в Internal — подписываться на него и вызывать напрямую из прикладного кода не стоит, контракт не публичный. Но события в журнале безопасности портала теперь приходят отсюда, и это полезно знать при расследовании.

Логгер прокинут в конструкторы хендлеров приложений и вебхуков как ?SecurityAuditLogger $securityAuditLogger = null (или со значением по умолчанию), так что старые new Handler() продолжают работать.

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

  • CRestApiServer::initRequestScope() получил второй обязательный аргумент MethodDescription. Наследники, переопределяющие метод со старой сигнатурой, не встанут. Смысл изменения — scope запроса теперь считается по описанию метода, а не выводится из самого запроса.
  • Internal\Entity\Integration\Integration::setQuery() ждёт ?array вместо ?string (и поле в конструкторе тоже сменило тип). Строку больше не проглотит — молчаливой деградации не будет, будет TypeError.
  • V3\Interaction\Request\ServerRequest::getToken() исчез из паспорта API.
  • IntegrationMapper::convertFromArray() / convertToArray() удалены.

Совместимо: LoadLimiter::is(), getResetTime(), getRestTime(), registerStarting(), registerEnding() перешли на ?string-параметры — вызовы с null перестали быть сюрпризом. У команд создания входящего вебхука (AbstractCreateIncomingWebhookCommand, CreateIncomingWebhookCommand, SystemIncomingWebhookCreator::create) добавился ?string $comment = null — теперь вебхуку можно оставить подпись, зачем он заведён.

V3: курсор вместо смещения

Появились TailResponse и CursorResponseDto — ответы с курсором и флагом hasMore, плюс DtoCollection::last().

Это тот же путь, которым уже прошли crm.item.list и прочие «быстрые» списки: offset-пагинация на больших выборках заставляет базу пересчитывать пропущенные строки, и чем дальше страница, тем дороже. Курсор запоминает позицию и не платит за хвост. last() в коллекции — как раз то, из чего этот курсор берётся.

Установщик

install/db/{mysql,pgsql}/*.sql удалены, InstallDB() зовёт installMigrations(). Схема — в install/migrations/tables.php, события и агенты — в events.php / agents.php, плюс migration_config.json. Для уже установленного модуля это рефакторинг, а не новая схема: накатывать ничего не нужно.

Что делать

  • Проверьте свой код на наследование CRestApiServer и на вызовы Integration::setQuery() со строкой.
  • Если писали своё логирование установок приложений — сравните со списком событий SecurityAuditLogger, возможно, велосипед можно убрать.
  • Для новых списков в V3 сразу берите TailResponse / курсор, а не смещение.

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

Символ Статус Чем заменять
IntegrationMapper::convertFromArray() Удалено
IntegrationMapper::convertToArray() Удалено
V3\Interaction\Request\ServerRequest::getToken() Удалено

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

security 26.200.0 Безопасность Свежее

Security 26.200.0 не ставится на маке и Windows: фатал «Cannot redeclare class» прямо в апдейтере

Обновление security 26.200.0 у нас не установилось вообще: апдейтер умирает с фаталом посреди своего скрипта. Если ваш прод на Linux — выдыхайте, вас это не касается. А вот если вы ставите обновления в локальной разработке на macOS или Windows (Docker с bind-mount проектной папки — это ровно тот слу...

4 мин
mail 26.900.0 Заметное Свежее

Mail 26.900.0: общие подписи ломают старый API, а тяжёлые вложения переезжают на Диск

Модуль mail получил один из самых жирных релизов за последнее время: 523 файла, +39 182/−3 131 строк. Внутри — три большие фичи (общие подписи, автоперенос тяжёлых вложений на Диск, избранное с AI-классификацией писем), переработанный IMAP-синк истории и три новые таблицы в БД. Если вы кастомизирова...

4 мин
location 26.300.0 Заметное Свежее

Location 26.300.0: батчевый обратный геокодинг — до 20 координат за один вызов

Релиз от 17 июня 2026 с одной, но цельной темой: в модуль `location` завезли батчевый обратный геокодинг — метод `findByCoordsList`, который превращает список координат в список локаций за один вызов сервиса. Если вы строите интеграции с картами или доставкой и до сих пор дёргали `findByCoords` в ци...

2 мин
main 26.700.0 Заметное Свежее

Main 26.700.0: в ядре появились фича-флаги

Битрикс выкатил main 26.700.0 — и это тот редкий случай, когда в ядре появляется целая новая подсистема: фича-флаги `Bitrix\Main\Config\Feature` с двумя таблицами в БД. Плюс несколько тихих поведенческих изменений, которые стоит проверить, если у вас не-UTF-8 сайт, кастомные фильтры пользователей ил...

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

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

на связи

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

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

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

Войти