Fileman 26.100.0: защита редактора и новый контракт PDF-просмотрщика
Обновление безопасности
Закрыта уязвимость или ослабленная проверка прав. Ставить в первую очередь.
Fileman 26.100.0 закрывает несколько способов провести PHP-код и небезопасные пути через файловый менеджер и HTML-редактор. Одновременно модуль меняет компонент bitrix:pdf.viewer: кастомные шаблоны и скрипты, рассчитанные на прежнюю разметку, придётся адаптировать.
Новое
Редактор строже проверяет код, файлы и пути
Пользователь без права edit_php больше не может подставить произвольный PHP-шаблон меню. Fileman игнорирует переданное значение и сохраняет прежний путь. Для пользователя с нужным правом путь преобразуется в абсолютный и нормализуется перед записью. Та же граница появилась у сниппетов: AJAX-действие edit_snippet отклоняет PHP-код без edit_php. При переименовании категории модуль принимает только безопасное одиночное имя, а файл .content.php и кэш меняет после успешного переименования каталога.
Загрузка изображения из HTML-редактора теперь проверяет структуру массива файла, совпадение имён, разделители пути, скриптовые расширения и допустимый формат изображения. Перед копированием Fileman получает реальный путь к document root и проверяет файл через CFile::CheckImageFile().
Экранирование настроек редактора тоже стало точнее. editor_body_class и editor_body_id хранятся без предварительного HTML-кодирования и экранируются при выводе. Значения toolbar, taskbar и размеров диалога проходят CUtil::JSEscape() или приводятся к числу. Генератор PHP-кода компонентов использует EscapePHPString() вместо общего addslashes().
PDF-просмотрщик получил новый интерфейс
bitrix:pdf.viewer теперь подключает расширение fileman.pdf-viewer, которое работает поверх ui.pdfjs-viewer. В интерфейсе появились слои, аннотации, подсветка, вставка изображений, диалоги альтернативного текста и обновлённые свойства документа. Новый BX.Fileman.PdfViewer настраивает PDFViewerApplication и использует worker из /bitrix/js/ui/pdfjs/dist/pdfjs.worker.bundle.js. Пути к ресурсам больше не передаются старому шаблону компонента.
Copilot учитывает бренд и элемент привязки
CHTMLEditor::getAiBrandDisplayName(): string получает отображаемое имя Copilot через сервис модуля ui. Если модуль недоступен, метод возвращает пустую строку. Имя попадает в placeholder и подпись кнопки редактора. ShowCopilotAtTheBottom() принимает элемент, около которого нужно открыть интерфейс, и возвращает результат показа. При внешней точке привязки редактор восстанавливает прокрутку, пока пользователь сам не начнёт взаимодействовать со страницей.
Для кода, который расширяет Fileman, появились ещё три метода: CSnippets::ReplaceCategoryPathInContent() безопасно меняет путь категории в ключах $SNIPPETS, а CFileMan::IsSafeName() и CFileMan::ResolveMenuTemplatePath() проверяют имена и вычисляют путь шаблона меню. Последние два публичны по модификатору, но не вошли в паспорт публичного API версии.
Что сломается
Кастомные шаблоны bitrix:pdf.viewer, которые читают $arResult['CSS_FILES'], $arResult['JS_FILES'] или $arResult['PATH_TO_WORKER'], перестанут подключать нужные ресурсы. Компонент передаёт новый ключ $arResult['ASSETS'] и загружает PDF.js через fileman.pdf-viewer.
Из штатного шаблона исчезли ID с суффиксом компонента, включая viewer_<id> и toolbarContainer_<id>. Удалены глобальные переменные pdfJsFilePath, pdfJsPathToWorker, pdfJsViewerId, pdfJsPrintDisabled и событие PdfJsChangeSource. Проверьте копии шаблона и внешний JavaScript, который обращается к этим ID, переменным или событию.
CDiskPdfComponent::executeComponent() теперь объявляет возвращаемый тип void, а getComponentId() — string.
Наследники с несовместимыми сигнатурами получат ошибку совместимости методов PHP.
Перед обновлением найдите переопределения bitrix:pdf.viewer.
Проверьте обращения к старым точкам интеграции. Штатный шаблон можно использовать как основу для переноса своих правок на новый DOM и BX.Fileman.PdfViewer.