fasthttp 1.77 ограничивает выход символических ссылок за каталог файлов

fasthttp 1.77 ограничивает выход символических ссылок за каталог файлов
Содержание статьи

26 октября вышла fasthttp 1.77.0, HTTP-библиотека для Go. Обновление ограничивает доступ к статическим файлам пределами настроенных каталогов и исправляет несколько ошибок соединений. На Mentoring.digital разбираем изменения, которые могут повлиять на существующий сервер.

Символические ссылки проверяются строже

Стандартная файловая система FS теперь отклоняет ссылки, выходящие за Root или CompressRoot. Абсолютные символические ссылки также отклоняются, даже если ведут внутрь нужного каталога. Относительные ссылки, остающиеся внутри корня, продолжают работать.

Ограничение реализовано для файловой системы операционной системы; собственные реализации FS.FS этим изменением не затрагиваются. Параметр AllowSymlinksOutsideRoot возвращает прежнее поведение, но включать его автоматически ради устранения ошибки не стоит: сначала нужно понять, зачем приложению нужен внешний путь.

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

Исправлены переданные соединения и добавлен ограниченный поток

При одновременном использовании KeepHijackedConns и ReduceMemoryUsage читатель переданного соединения теперь отделяется от контекста запроса до вызова обработчика. Исправление предотвращает зависимость последующих чтений от повторно использованного контекста.

Новый необязательный NewBoundedStreamReader ограничивает буферизацию копируемых данных и замедляет производителя, если потребитель не успевает читать. Указанные разработчиками пределы относятся к конкретным буферам передачи, а не ко всей памяти сервера. Прежние NewStreamReader и SetBodyStreamWriter автоматически на новый режим не переходят.

Проверка обновления на своём приложении

  • Проверьте используемые корни статических файлов и реальные символические ссылки, включая абсолютные.
  • Если есть собственная FS.FS, воспроизведите обновление устаревшего сжатого содержимого на тестовых данных.
  • Проверьте сценарии передачи соединений и их чтения после завершения обычного обработчика.
  • Для потоковых ответов сравните поведение с медленным потребителем, прежде чем менять используемый reader.

Новая версия не является поводом переписывать работающий сервер с net/http без измерений. Выбор библиотеки и проверку владения буферами можно разобрать с ментором по Go, опираясь на небольшой воспроизводимый пример и требования приложения.

Похожие статьи по данной теме