FTP Bridge 2.1.0: возможности и ограничения опубликованного кода

FTP Bridge 2.1.0: возможности и ограничения опубликованного кода

Обновлено 3 сентября 2026 года.

3 июля 2025 года мы анонсировали FTP Bridge 2.1.0 — Python/FastAPI-проект для передачи файлов с FTP, FTPS и SFTP источников клиентам по HTTP. Код опубликован в репозитории Lermont/ftp-bridge.

При актуализации 3 сентября 2026 года описание сверено с исходниками. В README заявлены полезные функции, однако некоторые обещания не соответствуют реализации. Поэтому прежняя характеристика релиза как готового к безопасной эксплуатации требует следующих уточнений.

Как передаётся файл

В main.py реализованы GET /download, HEAD /download и /health. GET сначала скачивает файл с источника во временный файл на сервере, а затем отдаёт его клиенту порциями. Это уменьшает необходимость держать весь файл в оперативной памяти, но требует места на диске и ожидания предварительного скачивания.

HEAD получает метаданные, включая размер, без передачи тела файла клиенту. Это обычный HTTP HEAD; его не следует смешивать с браузерным CORS preflight, использующим OPTIONS. Наличие HEAD также не доказывает совместимость каждого сценария обновления Power BI.

В storage_backend.py есть реализации FTP/FTPS и SFTP, обработка пути, маскирование имени пользователя и выбор размера порции. Автоматический размер порции основан на порогах размера файла, а не на измерении пропускной способности и динамической настройке сети.

Проверка SFTP-ключа зависит от настройки

Для SFTP используется Paramiko. Если задан путь known_hosts, код выбирает RejectPolicy для неизвестных ключей. Если путь не задан, выбирается AutoAddPolicy. Следовательно, строгую проверку ключа нельзя обещать для любой конфигурации по умолчанию.

Перед подключением рабочего источника необходимо настроить доверенные ключи и проверить отказ при неизвестном или изменившемся ключе. FTP, FTPS и SFTP также различаются по защите соединения; наличие нескольких протоколов в проекте не делает обычный FTP зашифрованным.

Читай также:  Разделы BI Data: коннектор, Битрикс24 и генератор ключевых фраз

Что обнаружено при проверке запуска

requirements.txt фиксирует Pydantic 2.5.0, но config.py одновременно содержит импорт BaseSettings из pydantic. В Pydantic 2 этот класс вынесен в pydantic-settings, что указано в официальном руководстве по миграции. Такой импорт вызывает ошибку до полноценного запуска приложения.

Кроме того, загрузчик токенов в конфигурации выбрасывает исключение, если не найден ни один токен. Заявление README о запуске без токенов в degraded mode этой проверкой не подтверждается. Эти несоответствия нужно устранить и проверить в отдельном окружении до развёртывания.

Команда установки requirements устанавливает зависимости; сама по себе она не подтверждает работоспособность сервиса. Полный запуск с FTP/FTPS/SFTP-источниками и проверка обновления Power BI в рамках этой редакционной проверки не выполнялись.

Лимиты и учётные данные

В коде есть общий лимит 100/minute и отдельная настройка GET /download, которая строится из rate_limit_requests и rate_limit_window. Значения конфигурации по умолчанию — 100 запросов за 3 600 секунд. Поэтому число «100 запросов в минуту» не описывает все ограничения сервиса.

Bearer-токен передаётся в заголовке Authorization, а параметры подключения к источнику, включая пароль, текущий обработчик принимает в query-параметрах. Они могут попасть в историю или журналы URL. Маскирование имени пользователя в отдельных сообщениях приложения не гарантирует скрытия таких параметров в логах веб-сервера и прокси.

Для рабочего развёртывания требуется пересмотреть передачу секретов, настроить HTTPS между клиентом и мостом, ограничения доступа, временное хранилище и очистку файлов. Заявления README о соответствии стандартам безопасности не являются результатом независимого аудита.

Что считать проверкой интеграции

  1. Устранить ошибки импорта и конфигурации; подтвердить запуск на выбранной версии Python с зафиксированными зависимостями.
  2. Проверить нужный протокол, доступ к тестовому файлу и отказ при неверной авторизации.
  3. Сверить размер и контрольную сумму полученного файла, затем проверить пустой файл, обрыв соединения и повторный запрос.
  4. Проверить свободное место, удаление временных файлов, журналы и фактическое действие лимитов.
  5. Выполнить обновление в целевой BI-системе под рабочей схемой авторизации и расписанием.
Читай также:  Обзор BI-систем: как сравнивать платформы перед внедрением

Публичный репозиторий описывает Python-реализацию. Наличие ссылки на него на сайте не означает, что любой ранее опубликованный PHP-мост автоматически обновлён до этой версии.