landing · Сайты 24 26.1100.200 Безопасность

Landing 26.1100.200: контроллер файлов Диска требует авторизацию и наконец отвязался от удалённого Block::isContains

3 мин чтения

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

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

Контроллер Bitrix\Landing\Controller\DiskFile, через который блоки Сайтов отдают файлы Диска, получил префильтры и проверку права на чтение страницы. Заодно он перестал вызывать Block::isContains(), который удалили ещё в 26.1000.0. Публичные сигнатуры и БД не менялись.

Проверьте, кто ходит за файлами без сессии

Раньше DiskFile::getDefaultPreFilters() возвращал пустой массив. Это отключало все стандартные фильтры контроллера, включая проверку авторизации. Теперь там два фильтра:

        new ActionFilter\Authentication(),
new ActionFilter\HttpMethod([ActionFilter\HttpMethod::METHOD_GET, ActionFilter\HttpMethod::METHOD_POST]),

    

CSRF отдельно не добавлен. Комментарий объясняет это тем, что ссылку на скачивание браузер открывает GET-запросом, а базовый контроллер сам вешает CSRF только на POST. Анонимный запрос к downloadAction, viewAction и infoAction теперь до действия не дойдёт.

Проверка доступа внутри действий тоже стала строже:

  • downloadAction и viewAction (параметры scope, blockId, fileId) сначала ищут страницу через Block::findVisibleLandingIdByFileInBlock(), а потом спрашивают Rights::hasAccessForLanding($landingId, Rights::ACCESS_TYPES['read']). Раньше хватало того, что Block::isContains() находил в блоке ссылку на файл.
  • infoAction идёт в обратном порядке. Сначала проверяет право чтения страницы («rights check is cheaper than the search through the content, so it goes first»), потом ищет ссылку на файл в самой странице и в её областях через Block::findVisibleLandingIdByFileInLanding(). При отказе действие теперь добавляет ошибку Access denied., а раньше молча возвращало null.
  • Публичные scope отклоняются, как и раньше. Комментарий к switchToScope() поясняет, что защищённых файлов в них нет.

Если ваш фронтенд или интеграция дёргает эти действия без пользовательской сессии, после обновления запросы начнут отсекаться фильтром авторизации.

Если стояли 26.1000.0–26.1100.100, проверьте скачивание файлов

В 26.1000.0 публичный Block::isContains() удалили и заменили парой findVisibleLandingIdByFileInBlock() / findVisibleLandingIdByFileInLanding(). Причина описана там же, в комментарии со ссылкой на Mantis #252316. Поиск подстрокой ловил числовой префикс, и файл 25 находился в ссылке на файл 250.

Контроллер DiskFile при этом не тронули ни в 26.1000.0, ни в 26.1100.0, ни в 26.1100.100. Вызов Block::isContains() виден в удалённых строках диффа этого релиза. Кроме того, новые методы Block через приватный помощник звали Connector\Disk::getExactFileHrefPattern(), а этот метод появляется в паспорте API только сейчас.

Как это проявлялось вживую, из диффа не понять. Если у класса нет магического __callStatic (в диффах его нет), PHP на вызове несуществующего статического метода бросает Error. В 26.1100.200 закрыты обе стороны: контроллер перешёл на новые методы, а недостающий метод в Connector\Disk добавлен.

Новое: точное совпадение ссылки на файл

Bitrix\Landing\Connector\Disk::getExactFileHrefPattern(int $objectId): string отдаёт регулярку, которая совпадает только со ссылкой на заданный id. Константа FILE_MASK_HREF ловит ссылку на любой файл, а поиск подстрокой спотыкается о префиксы:

        <?php declare(strict_types=1);

use Bitrix\Landing\Connector\Disk;
use Bitrix\Main\Loader;

Loader::requireModule('landing');

$content = '<a href="' . Disk::FILE_PREFIX_HREF . '250">Прайс</a>';

var_dump(str_contains($content, Disk::FILE_PREFIX_HREF . '25'));          // true, ложное совпадение
var_dump((bool)preg_match(Disk::getExactFileHrefPattern(25), $content));  // false
var_dump((bool)preg_match(Disk::getExactFileHrefPattern(250), $content)); // true

    

Внутри это preg_quote() от префикса с id и негативный просмотр вперёд (?![\d]), так что после id не должно идти ещё одной цифры.

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

  • Приватные методы контроллера переименованы по смыслу: blockContainsFile() стал canReadFileInBlock(), landingContainsFile() превратился в canReadFileInLanding() плюс новый landingContainsFile(int, int). На API это не влияет.
  • В docblock'ах поправили английский: «Check disk's files» → «Checks disk's files», «after check permissions» → «after permissions check».
  • Сборка от 4 сентября 2026. Deprecated и изменений в БД нет.

Что делать

  • Если интеграции скачивают файлы Диска из блоков без авторизации, переведите их на запросы от имени пользователя.
  • Если на портале стояли версии 26.1000.0–26.1100.100, после обновления откройте файл из блока страницы в непубличном scope и убедитесь, что он скачивается.
  • Ищите ссылки на файлы Диска в своём коде через Disk::getExactFileHrefPattern(). Поиск подстрокой ловит чужие id с тем же префиксом.

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

landing 26.1200.0 Безопасность Свежее

Landing 26.1200.0: подписанный предпросмотр ушёл в CSP-песочницу, а импорт с заменой сайта помечает старые страницы удалёнными

Landing 26.1200.0 трогает 690 файлов, но основная масса там картинки, переводы и пересобранные бандлы. Релиз закрывает дыры в подписанной ссылке предпросмотра, чинит импорт с заменой сайта и размечает для скринридеров интерфейсы прав, настроек и редактора. Если вы вызываете `AiSiteChatAvailabilitySe...

2 мин
landing 26.1100.100 Рутинное Свежее

Landing 26.1100.100: только номер версии

В `install/version.php` поменялись номер версии и дата сборки (20 августа), больше в релизе ничего нет. Следом идёт [landing 26.1100.200](/bitrix-updates/landing/landing-26-1100-200) с содержательной правкой контроллера файлов Диска.

1 мин
landing 26.1100.0 Безопасность Свежее

Landing 26.1100.0: закрыта цепочка уязвимостей, заодно ужесточены repo.register, savePicture и проверка ссылок предпросмотра

`landing` 26.1100.0 (сборка от 06.08.2026) почти целиком про безопасность. Закрыты исполнение кода через манифест repo-блока и импорт архива сайта, инъекция в `eval()` через CODE страницы, SSRF через обработчик виджета, XSS в выводе ассетов, предсказуемый в облаке md5-хеш предпросмотра. В комментари...

14 мин
landing 26.1000.0 Заметное

Landing 26.1000.0: удалён Block::isContains, ссылки теперь режутся по белому списку схем

Обновление `landing` 26.1000.0 (сборка от 24.08.2026) — это на 90% security-хардening плюс новая песочница для превью страниц «на устройствах». Дифф огромный — 1300 файлов, +73 тысячи строк — но почти всё это пересобранные JS-бандлы, контентные блоки и webp вместо png. Содержательного PHP — примерно...

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

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

на связи

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

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

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

Войти