Vuonna 2026 raportoitiin päivässä 131% enemmän CVE:itä kuin edellisenä vuonna.

Riippuvuudet

Mikä on riippuvuusgraafi?

Riippuvuusgraafi kartoittaa jokaisen paketin, josta ohjelmistosi riippuu, ja sen, mikä paketti toi sen mukaan. Lista kertoo, mitä ohjelmistossasi on. Graafi kertoo, miksi se on siellä ja mihin muuhun se vaikuttaa, ja juuri sitä kysyt, kun haavoittuvuus ilmaantuu.

Päivitetty

The same dependencies as a tree and as a graph As a tree, express leads to body-parser and send, and debug appears twice, once under each. As a graph, debug is a single node with an edge from body-parser and an edge from send, forming a diamond. Tree shared packages repeat express body-parser send debug debug Graph one node, two parents express body-parser send debug

Solmut, kaaret ja polut

Riippuvuusgraafissa jokainen paketti on solmu, ja jokainen "riippuu"-suhde on kaari paketista toiseen. Projektisi on ylimpänä. Sen suorat riippuvuudet ovat yhden kaaren päässä, ja sen transitiiviset riippuvuudet ovat kaikki, mikä on siitä alempana. Reitti projektistasi mihin tahansa pakettiin on sen riippuvuuspolku, ja yhdellä paketilla voi olla useita.

Graafi, puu vai lista

Samat riippuvuudet voi näyttää kolmella tavalla, ja kukin vastaa eri kysymykseen.

Näkymä Mitä se näyttää Mitä siitä katoaa
Litteä lista Jokainen paketti kerran versioineen Miksi kukin paketti on mukana
Puu Jokainen polku projektistasi, sellaisena kuin paketinhallinnat sen tulostavat Jaetut paketit toistuvat, joten puu liioittelee kokoa
Graafi Jokainen paketti kerran, kaari kustakin yläpaketista Vaikeampi lukea silmämääräisesti ilman katseluohjelmaa

Jaetut paketit ovat syy siihen, että graafeilla on väliä. Kun kaksi riippuvuuttasi tarvitsee samaa pakettia, se muodostaa timantin: yksi solmu, jolla on kaksi yläpakettia. Sen haavoittuvuuden korjaaminen edellyttää molempien polkujen tuntemista, koska kumpi tahansa yläpaketti voi lukita vanhan version.

Mihin riippuvuusgraafia käytetään

  • Korjauspolun löytäminen. Haavoittuva transitiivinen paketti korjataan päivittämällä tai ohittamalla jotain sen polulla. Graafi näyttää, mikä suora riippuvuus on siirrettävä.
  • Vaikutusalueen mittaaminen. Kun tietoturvatiedote julkaistaan, graafi näyttää, mitkä suorista riippuvuuksistasi, palveluistasi ja tuotteistasi johtavat haavoittuvaan pakettiin.
  • Lisenssien tarkastus. Syvällä graafissa oleva copyleft-lisenssi pätee yhtä lailla kuin ylimpänä oleva, ja polku kertoo, mikä riippuvuus toi sen mukaan.
  • Päivitysten suunnittelu. Yhden paketin pääversion päivitys muuttaa kaiken sen alapuolella. Graafi näyttää, kuinka suuri osa puustasi liikkuu.
  • Riskikeskittymien havaitseminen. Pieni, ylläpitämätön paketti, jonka kautta monet polut kulkevat, on yksittäinen vikaantumispiste.

Miten saat riippuvuusgraafin

Paketinhallinnasta. Jokainen paketinhallinta tulostaa ratkaistun puun, ja useimmat osaavat selittää, miksi yksittäinen paketti on mukana. Transitiiviset riippuvuudet -sivulla on komennot npm:lle, pnpm:lle, Pythonille, Go:lle, Rustille, Mavenille ja Gradlelle.

GitHubista. Repositorion Insights-välilehden riippuvuusgraafi on yhteenveto repositorion manifesteista ja lukitustiedostoista sekä dependency submission API:n kautta lähetetyistä riippuvuuksista. Tukea tarjoavissa ekosysteemeissä GitHub näyttää transitiivisen polun, joka toi kunkin riippuvuuden mukaan, ja se voi viedä graafin SBOM:na.

SBOM:sta. CycloneDX tallentaa graafin dependencies-osioon, jossa kukin komponentti luettelee, mistä se riippuu. SPDX käyttää pakettien välisiä DEPENDS_ON-suhteita. Express-sovelluksen osan CycloneDX-graafi näyttää tältä:

"dependencies": [
  { "ref": "my-app", "dependsOn": ["express"] },
  { "ref": "express", "dependsOn": ["body-parser", "send"] },
  { "ref": "body-parser", "dependsOn": ["raw-body", "debug"] },
  { "ref": "send", "dependsOn": ["mime-types", "debug"] }
]

Tässä debug on kahden yläpaketin alla: timantti. Monet SBOM:t jättävät suhteet pois ja luettelevat vain komponentit, jolloin inventaario säilyy, mutta jokainen polku katoaa.

Graafi on vain niin hyvä kuin sen lähde

Useimmat riippuvuusgraafit muodostetaan manifesteista ja lukitustiedostoista, joten ne näyttävät puun, jonka paketinhallinta suunnitteli. Ne eivät näytä CI-välimuisteista palautettuja paketteja, asennusvaiheiden asentamia build-työkaluja tai asennusskriptien ja latausten hakemaa koodia, eivätkä ne pysty kertomaan, asensiko buildi täsmälleen lukitustiedoston mukaisesti. Katso miksi lukitustiedosto ei ole tallenne siitä, mitä toimitettiin.

Riippuvuusgraafit CRACI:ssa

CRACI muodostaa graafinsa itse buildista. Se on GitHub Actions -runneri, joka tallentaa jokaisen paketin, jonka kukin jobi hakee, puun jokaisella tasolla ja CI-välimuisteista palautetut paketit mukaan lukien, SBOM:iin, joka ilmoittaa oman kattavuutensa.

  • SBOM graafinäkymänä. Riippuvuusnäkymä näyttää SBOM:n riippuvuuskerrokset Pivot-, Graph-, Blob-, Chord- ja Sunburst-näkymissä, ja syvyyttä ja vakavuutta voi suodattaa.
  • Viennit koko puulla. CycloneDX- ja SPDX-viennit sisältävät transitiiviset riippuvuudet, kukin ilmoitetun lisenssinsä kanssa.
  • Haavoittuvuuden koskemat buildit ajan mittaan. Kun uusi haavoittuvuus ilmaantuu, buildihistoria näyttää, mitkä aiemmat buildit sisälsivät haavoittuvan paketin, suorana tai transitiivisena.

Katso SBOM-generointi CRACI:ssa tai varaa demo ja tutki jonkin oman buildisi graafia.

Riippuvuusgraafit: usein kysytyt kysymykset

Mikä on riippuvuusgraafi?

Riippuvuusgraafi on kartta jokaisesta paketista, josta ohjelmistosi riippuu, ja siinä on nuoli kustakin paketista niihin paketteihin, joita se tarvitsee. Se ei näytä vain sitä, mitä ohjelmistossasi on, vaan myös miksi: polun koodistasi kuhunkin transitiiviseen riippuvuuteen.

Mitä eroa on riippuvuuspuulla ja riippuvuusgraafilla?

Puu näyttää jokaisen polun erikseen, joten kahden yläpaketin tarvitsema paketti näkyy kahdesti. Graafi näyttää jokaisen paketin kerran, ja siihen johtaa kaari jokaisesta sitä tarvitsevasta yläpaketista. Paketinhallinnat tulostavat puita, koska niitä on helppo lukea; vaikutuksia analysoivat työkalut käsittelevät graafia.

Sisältääkö SBOM riippuvuusgraafin?

Voi sisältää. CycloneDX:ssä on dependencies-osio, jossa kukin komponentti luettelee komponentit, joista se riippuu, ja SPDX ilmaisee saman DEPENDS_ON-suhteilla. Monet SBOM:t jättävät suhteet pois ja luettelevat vain komponentit, jolloin polut katoavat.

Miten näen GitHub-repositorion riippuvuusgraafin?

Avaa repositorion Insights-välilehti ja valitse Dependency graph. GitHub muodostaa sen repositorion manifesteista ja lukitustiedostoista sekä kaikesta, mitä on lähetetty sen dependency submission API:n kautta, ja tukea tarjoavissa ekosysteemeissä se näyttää polun, joka toi kunkin transitiivisen riippuvuuden mukaan.

Mikä on timanttiriippuvuus?

Kaksi riippuvuuttasi riippuu samasta paketista, joten graafi muodostaa timantin. Jos ne tarvitsevat siitä yhteensopimattomia versioita, paketinhallinnan on asennettava kaksi kopiota tai epäonnistuttava, ja tämä on yksi syy siihen, että graafia on vaikeampi hallita kuin miltä se näyttää.

Näe graafi siitä, mitä buildisi haki

Aja yksi GitHub Actions -työnkulku CRACI:lla ja tutki sen tallennetun SBOM:n riippuvuusgraafia puun jokaisella tasolla.

Varaa demo