Skip to content

fix(browser): allow double dots in filenames, normalize path traversal by segments - #83

Open
Ibochkarev wants to merge 1 commit into
3.xfrom
fix/16663-double-dot-filename-sanitize
Open

fix(browser): allow double dots in filenames, normalize path traversal by segments#83
Ibochkarev wants to merge 1 commit into
3.xfrom
fix/16663-double-dot-filename-sanitize

Conversation

@Ibochkarev

@Ibochkarev Ibochkarev commented Aug 21, 2026

Copy link
Copy Markdown
Member

Что сделано

Останавливает Browser::sanitize() от переписывания имён файлов, содержащих последовательные точки внутри одного сегмента пути (например somefile..txt).

Старый preg_replace('/\.(?![\w\-\~\s])/u', '', …) трактовал эти точки как небезопасные и превращал имя в somefile.txt, поэтому delete/rename/download промахивались мимо реального файла. Этот паттерн убран. Мягкая чистка (URL-decode, strip tags, коллапс //) остаётся. Path traversal по-прежнему обрабатывается Flysystem WhitespacePathNormalizer, когда media source читает или пишет.

Зачем нужно

somefile..txt — валидное имя. Пользователи могли его загрузить, а File Browser не мог удалить или переименовать, потому что sanitize менял путь первым. См. modxcms#16663.

Как проверить

  1. В Media / File Browser загрузите или создайте somefile..txt.
  2. Удалите его — должно пройти.
  3. Повторите с rename/download.
  4. Подтвердите, что ../-пути по-прежнему не могут выйти за корень media source (Flysystem отвергает traversal).

Связанные

Refs modxcms#16663

Оригинал: modxcms#16838

Stop stripping dots that are not followed by a word character in
Browser::sanitize(). Names like somefile..txt stay intact; path
traversal remains Flysystem's job.
@Ibochkarev Ibochkarev changed the title fix(browser): разрешить двойные точки в именах файлов, нормализовать path traversal по сегментам fix(browser): allow double dots in filenames, normalize path traversal by segments Aug 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant