Поддерживаемые протоколы

Реализация OSA Proxy

Эта страница относится к текущей реализации OSA Proxy. Архивная Java/Spring-реализация доступна в разделе Архивная Java/Spring-реализация.

Раздел описывает, какие ресурсы OSA Proxy проверяет и какие ответы может модифицировать для каждой экосистемы.

Сводная таблица

ЭкосистемаСканирование манифестовСканирование пакетовМодификация ответов
MavenДаДаУдаление заблокированных версий из maven-metadata.xml, обновление latest и release.
GradleДаДаРабота через Maven-совместимые репозитории: фильтрация metadata и проверка скачиваемых пакетов.
IvyНетДаПроверка артефактов и пакетов по шаблону путей (layout).
npmДаДаУдаление заблокированных версий из metadata, обновление dist-tags и ссылок на tarball.
PyPIДаДаУдаление ссылок на заблокированные версии из Simple API, переписывание URL загрузки через прокси.
NuGetДаДаМодификация service index и registration metadata, удаление заблокированных версий.
Go modulesДаДаУдаление заблокированных версий из @v/list, проксирование module zip и SumDB.
CocoaPodsДаДаПроверка .podspec.json, переписывание source.http через прокси для разрешенных хостов.
SwiftДаДаМодификация списка релизов (удаление или problem: 410), проверка zip-архивов пакетов.
HexДаДаПроверка и переподпись protobuf-манифестов RSA-ключом (удаление или отметка retired: security), проверка архивов пакетов.
ComposerДаДаМодификация metadata Packagist/Composer и переписывание dist URL через прокси.
RubyGemsДаДаПроверка metadata RubyGems и скачиваемых .gem-пакетов.
Conan v2ДаДаОбработка search, list и revisions, удаление заблокированных версий и проверка пакетов.
R (CRAN)НетДаИндексы PACKAGES, PACKAGES.gz и PACKAGES.rds не модифицируются.
DebianНетДаСистемные индексы Packages не модифицируются.
Alpine (APK)НетДаИндексы APKINDEX не модифицируются.
RPMНетДаMetadata repodata не модифицируется.
DockerДаНетПроверка image manifest (scan-container); manifest list используется для определения image manifest и не отправляется на проверку как отдельный компонент. Blob/layer-запросы проксируются без отдельной проверки слоев. Для нескольких Docker-репозиториев используются поддомены.

Параметры scan-manifest и scan-package

scan-manifest включает проверку и модификацию metadata, из которой пакетный менеджер выбирает доступные версии. При срабатывании блокирующей политики небезопасные версии удаляются из ответа или помечаются как заблокированные, если формат это поддерживает.

scan-package включает проверку скачиваемого артефакта: архива, бинарного пакета, module zip, пакета R, .gem, .deb, .apk или .rpm. Если политика блокирует компонент, скачивание прерывается с HTTP-кодом из codescoring.block-status-code.

Для R, Debian, Alpine, RPM и Ivy используется только scan-package: индексы не изменяются, поэтому пакетный менеджер может видеть версию в индексе, но скачивание конкретного пакета будет заблокировано при нарушении политики.

Для Docker проверка манифеста образа управляется параметром scan-container (по умолчанию true). Manifest list используется для определения image manifest; blob/layer-запросы проксируются в registry.

Для npm, NuGet, PyPI, Swift и Hex поддерживается параметр remove-blocked-versions: false. В этом случае заблокированная версия остаётся в metadata с пометкой (для Swift — поле problem: 410, для Hex — статус retired: security). Composer и Conan всегда удаляют заблокированные версии.

Maven

  • Metadata: maven-metadata.xml.
  • Пакеты: .jar, .war, .ear и другие Maven-артефакты.
  • При модификации metadata заблокированные версии удаляются из списка, а поля latest и release обновляются на последнюю разрешенную версию.

npm

  • Metadata: JSON-описание пакета.
  • Пакеты: .tgz.
  • Из metadata удаляются заблокированные версии, связанные записи time, а dist-tags пересчитываются на разрешенные версии.

PyPI

  • Metadata: страницы Simple API.
  • Пакеты: .whl, .tar.gz, .zip и другие архивы Python-пакетов.
  • Ссылки на заблокированные версии удаляются, URL загрузки переписываются так, чтобы скачивание проходило через OSA Proxy.

NuGet

  • Metadata: service index и registration index.
  • Пакеты: .nupkg.
  • Для клиента используется маршрут /nuget-api/v3/index.json; metadata переписывается на URL OSA Proxy.

Go modules

  • Metadata: список версий @v/list.
  • Пакеты: module .zip.
  • Заблокированные версии удаляются из списка версий. Для SumDB используется sumdb-registry и настройка GOSUMDB.

Ivy

  • Metadata: ivy.xml и вспомогательные дескрипторы не модифицируются.
  • Пакеты: JAR, ZIP и другие артефакты, сопоставленные по шаблону layout (sbt-default, ivy-default или кастомный шаблон).
  • При нарушении политики загрузка артефакта прерывается со статусом блокировки.

CocoaPods

  • Metadata: сканирование спецификаций .podspec.json. Системные индексы CDN (all_pods.txt, CocoaPods-version.yml) проксируются без изменений.
  • Пакеты: архивы зависимостей, загружаемые по протоколу source.http.
  • Ссылки на доверенные upstream-хосты из additional-packages-registries переписываются через маршруты OSA Proxy для проверки архивов. Заблокированные спецификации блокируются целиком.

Swift Package Registry

  • Metadata: список релизов пакета. При remove-blocked-versions: true заблокированные версии удаляются, при false — помечаются ошибкой problem: 410 со ссылкой на политику.
  • Пакеты: ZIP-архивы релизов пакетов.
  • Файлы Package.swift проксируются без отдельных запросов к CodeScoring.

Hex

  • Metadata: бинарные protobuf-манифесты Hex. OSA Proxy валидирует подпись upstream-реестра, модифицирует список релизов и подписывает ответ собственным RSA-ключом.
  • Пакеты: архивы .tar.
  • При remove-blocked-versions: false версии помечаются как retired: security с указанием политики, что позволяет фильтровать их через встроенную Hex-политику osa-proxy/codescoring.

Composer

  • Metadata: Composer/Packagist metadata.
  • Пакеты: dist-архивы .zip, .tar, .tgz, .tar.gz, .tar.bz2, .tar.xz.
  • Dist URL переписываются на маршруты OSA Proxy. Для внешних dist-хостов используйте packages-registry и additional-packages-registries.

RubyGems

  • Metadata: индексы RubyGems.
  • Пакеты: .gem.
  • Проверяются metadata и скачиваемые gem-пакеты.

Conan v2

  • Metadata: запросы search, list и revisions Conan API v2.
  • Пакеты: recipe и package artifacts Conan.
  • Заблокированные версии всегда удаляются из результатов.

R (CRAN)

  • Metadata: индексы PACKAGES, PACKAGES.gz и PACKAGES.rds проксируются без модификации.
  • Пакеты: исходные .tar.gz и поддерживаемые R бинарные архивы.
  • При нарушении политики скачивание пакета блокируется, но версия остаётся видимой в индексе.

Docker

  • Metadata: Docker image manifest. Проверка манифеста управляется параметром scan-container (по умолчанию включена). Manifest list используется для выбора image manifest.
  • Пакеты: отдельного scan-package нет; blob/layer-запросы проксируются дальше в registry.
  • Режим pull-through proxy: при codescoring-pull-through-proxy: true OSA Proxy передает внешний pull URL в CodeScoring при проверке контейнеров.
  • Несколько Docker-репозиториев разделяются по поддоменам (repository[*].name), так как Docker Registry API v2 использует фиксированные пути /v2/.

Диагностика блокировки

Если пакетный менеджер не показывает причину блокировки, проверьте соответствующий metadata endpoint напрямую:

curl https://osa-proxy.example.com/npm/lodash
curl https://osa-proxy.example.com/pypi/simple/requests/
curl https://osa-proxy.example.com/maven/org/apache/commons/commons-lang3/maven-metadata.xml
curl https://osa-proxy.example.com/nuget/nuget-api/v3/registration5-gz-semver2/newtonsoft.json/index.json
curl https://osa-proxy.example.com/go/github.com/gin-gonic/gin/@v/list
Страница была полезна?