Gå til hovedindhold

Hentede pakkeversioner

Et afhængighedsfund siger, at en version er erklæret et eller andet sted. Pull-optællingen siger noget andet: hvilke pakkeversioner der faktisk blev downloadet, af hvilken forbruger, og hvor nylig. Den optælles fra registrets adgangslog, så den dækker dine egne pakker i fremforges registry og de pakker, din organisation henter gennem afhængighedsproxyen, herunder hentninger fra CI uden for fremforge, der bruger en registry-robot.

Siden 2026-10-13 tælles en download, som et Forgejo Actions-job foretager gennem afhængighedsproxyen, og som proxyen leverer fra sin cache, direkte her og gemmes ikke som en hændelse i adgangsloggen (se registrets adgangslog). Optællingen er derfor registreringen af de hentninger: pr. UTC-døgn, pakkeversion og repository, med de kørsler, der hentede dem.

Hvad der tæller som en hentning

En hentning er en vellykket download, der angiver en version: en npm-tarball, en PyPI-fil, en Maven-artefakt, en NuGet-pakke, en Go-modul-zip, en generisk eller anden registry-fil eller et container-image hentet via tag. Disse tælles ikke:

  • læsninger af metadata, for eksempel et npm-packument eller et PyPI simple index;
  • afviste forespørgsler;
  • downloads af container-lag, som kun angiver en digest.

En download, som en politik i skyggetilstand ville have afvist, men lod passere, tæller som en hentning.

Forbrugere

Hver hentning tilskrives den forbruger, adgangsloggen registrerede:

TypeHvemNavngivet ved
jobEt token fra et Forgejo Actions-jobJobbets repository, <owner>/<repo>. run_ids angiver de Actions-kørsler, der hentede versionen
robotEn registry-robotRobottens navn. login indeholder dens bot-bruger
botEn anden systembot i fremforgeDens login
userEn persons token eller sessionPersonens login
anonymousEn forespørgsel uden credentialIntet

Hvilke advisories der kobles på

  • Versioner hentet gennem afhængighedsproxyen (npm, PyPI, Maven, NuGet og Go) sammenholdes med det OSV-advisory-index, som proxyens pakkepolitik evaluerer. Versionsintervaller evalueres, ikke kun præcise versioner. source er advisory_index.
  • Versioner af dine egne pakker i registret får de åbne fund for den pakkefil, altså de samme fund, som pakkepolitikken læser. Afviste og løste fund udelades. source er package_findings.
  • Container-images tælles med, men denne liste viser ingen advisories for dem. Fund i images står på siderne om image-scanning.

I konsollen

Åbn Sikkerhed › Komponenter › Hentede versioner i organisationens administration. Siden viser de samme versioner som API’et, i samme rækkefølge og med samme filtre: pakkenavn, periode (i dag eller de seneste 7, 30, 90 eller 365 dage), minimumsalvorlighed, økosystem, kilde (dit eget registry eller afhængighedsproxyen), forbrugertype og forbruger. Sæt flueben ved Medtag versioner uden kendt sårbarhed for at se alle hentede versioner, ikke kun de sårbare. Hver række viser den højeste alvorlighed, op til tre advisories med en rettet version, antallet af hentninger pr. forbrugertype, de største forbrugere og hvornår versionen sidst og først blev hentet. Linjen over tabellen angiver, op til hvornår adgangshændelser er talt med. Næste side og Første side bladrer gennem listen; Eksportér CSV downloader alle matchende versioner med de aktuelle filtre, i de samme kolonner som API’ets CSV.

Læs den med API’et

Med et API-token, der har components:read eller findings:read:

curl -sS -H "Authorization: Bearer $FFP_TOKEN" \
  "https://frem.sh/_app/api/v1/orgs/acme/components/pulled?days=30&min_severity=high"

Som standard indeholder listen kun sårbare versioner, de mest alvorlige først og derefter de senest hentede. Hvert element har versionen og dens purl, den højeste severity, advisories med deres rettede versioner, det samlede antal pulls, hentninger pr. forbrugertype, first_seen_at og last_seen_at samt op til ti consumers med deres egne antal og tidspunkter. En forbruger af typen job har også run_ids: op til 20 id’er på Actions-kørsler (GITHUB_RUN_ID), der hentede versionen i perioden, nyeste først.

FilterBetydning
daysHvor mange UTC-døgn tilbage, inklusive i dag: 1 til 730, standard 30
vulnerabletrue (standard) for versioner med en åben advisory; false for alle hentede versioner
min_severitylow, medium, high eller critical
ecosystemPakketypen: npm, pypi, maven, nuget, go, container, …
originregistry (dine egne pakker) eller proxy (afhængighedsproxyen)
nameEt pakkenavn, præcist
consumer_kindjob, robot, bot, user eller anonymous
consumerEt repository (owner/name), et robotnavn eller et login
run_idId’et på en Actions-kørsel (GITHUB_RUN_ID): kun de versioner, den kørsel hentede

For at se, hvad ét build hentede, angiver du dets kørsels-id med vulnerable=false:

curl -sS -H "Authorization: Bearer $FFP_TOKEN" \
  "https://frem.sh/_app/api/v1/orgs/acme/components/pulled?run_id=123456&vulnerable=false&days=7"

Send en sides next_cursor som cursor for at få næste side med de samme filtre, og stop, når den er null. En side indeholder op til 500 versioner (limit). Tilføj format=csv for at få alle matchende versioner som CSV. En forespørgsel, der matcher mere end 50.000 versioner, besvares med 413 too-many-rows; indsnævr den. Se API-referencen for den fulde struktur.

Hvor frisk den er, og hvor længe den gemmes

Optællingen samles fra adgangsloggen hver time. window.rolled_up_to i svaret angiver, op til hvornår adgangshændelser er talt med. CI-downloads leveret fra afhængighedsproxyens cache lægges til, efterhånden som de kommer, uden at vente på den timevise sammentælling.

Optællingen følger adgangsloggens opbevaring af bevismateriale og slettes af det samme daglige job: et døgns optællinger forsvinder, når den nyeste download, de tæller, er ældre end opbevaringsperioden for access_log, eller for access_log_ci ved CI-hentninger gennem afhængighedsproxyen. Så længe et retsligt tilbageholdelseskrav (legal hold) er aktivt, slettes intet.

I dataeksporten

Hver dataeksport indeholder optællingen som metadata/pulled-versions.ndjson, én linje pr. UTC-døgn, pakkeversion og forbruger, altså de rækker, denne side lægger sammen. Se Eksportskema. Advisories er ikke med i filen: de kobles på, når du læser listen, ud fra advisory-data, der ændrer sig over tid.

Begrænsninger

  • En hentning er ikke en udrulning. En version kan være hentet af et build og aldrig være sendt ud, eller hentet én gang og cachet i månedsvis.
  • Hentninger fra caches uden for fremforge ses ikke. Kun forespørgsler, der når fremforges registry eller afhængighedsproxy, tælles.
  • Teams registreres ikke. En brugers hentning tilskrives brugeren.
  • Kørsels-id’er gemmes fra 2026-10-13. Pr. UTC-døgn, pakkeversion og repository gemmes de 100 nyeste kørsler; et repository, der kører mere end 100 builds om dagen, som henter den samme version, beholder antallet af alle hentninger, men kun id’erne på de 100 nyeste kørsler.
  • Optællingen registrerer ikke, hvilket job i en kørsel der hentede en version, eller det præcise tidspunkt for hver hentning, kun den første og sidste i døgnet.