Aktuellt läge: PHP2Shell. Två kritiska PHP-sårbarheter (CVSS 9,2) tillåter skadlig kod utan inloggning. Patchar sedan den 21 oktober 2026.Vad som bör göras nu →

composer audit: kontrollera beroenden efter sårbarheter

Hur utvecklare med composer audit hittar kända sårbarheter i bibliotek, automatiserar kontrollen och undviker typiska fel i deployment.

Aktualitet 5 min läsningGuider

Kort sagt: composer audit jämför paketen i ert PHP-projekt med kända säkerhetsmeddelanden och visar berörda versioner. Kör kommandot vid varje build och regelbundet mot produktionsnivån. Viktigt efter PHP2Shell: Kontrollen omfattar bibliotek, inte själva PHP-tolken.

Varför beroenden behöver uppmärksamhet just nu

Moderna PHP-applikationer består till största delen av främmande kod. En butik baserad på Symfony eller en portal med Laravel har snabbt flera dussin till hundratals paket, många av dem indirekt via andra paket. Vart och ett av biblioteken kan innehålla en sårbarhet. OWASP Top 10 för därför upp föråldrade och sårbara komponenter som en egen riskkategori.

I oktober 2026 visade PHP2Shell hur snabbt en kritisk sårbarhet får spridning. De två sårbarheterna CVE-2026-109618 och CVE-2026-109619 berör visserligen PHP självt och inte Composer-paket. Många team gick dock under de dagarna igenom hela sin kedja och upptäckte då att de inte kände till läget för sina beroenden exakt.

Den luckan i överblicken går att täppa till med litet arbete. Composer har redan det rätta verktyget med sig i aktuella versioner.

Vad composer audit kontrollerar och vad det inte gör

Kommandot läser de installerade paketen eller lock-filen och frågar efter kända säkerhetsmeddelanden om de paketen. För varje träff visar det paket, berört versionsintervall, allvarlighetsgrad, meddelandets beteckning och en länk till beskrivningen.

Nivå Kontrolleras av composer audit? Hur man kontrollerar i stället
Composer-paket i projektet ja composer audit
PHP-tolken (t.ex. PHP2Shell) nej Paketstatus, bekräftelse från webbhotellet
PHP-tillägg från systemet nej Distributionens pakethantering
JavaScript-paket i frontend nej Respektive pakethanterares verktyg
Egen applikationskod nej Kodgranskning, säkerhetsgranskning

Kommandot beaktar även indirekta beroenden, alltså paket som ni aldrig själva begärt men som följer med via andra paket. Just där finns sårbarheter ofta obemärkta, eftersom ingen i teamet känner till de paketen. Nyare Composer-versioner pekar dessutom ut paket som deras upphovspersoner markerat som övergivna. Sådana paket får i regel inga rättningar längre och bör ersättas.

Ett rent resultat betyder alltså bara att det inte finns något känt meddelande för de installerade paketversionerna. Okända sårbarheter och fel i den egna koden hittar verktyget inte. Hur ni kontrollerar PHP-nivån själva beskriver artikeln Kontrollera PHP-version och patchstatus rätt.

Köra composer audit och läsa resultaten

I projektkatalogen räcker ett kommando. Varianterna skiljer sig åt i vad som kontrolleras och hur resultatet visas.

# Kontrollera installerade paket
composer audit

# Kontrollera bara lock-filen, t.ex. i bygget utan installerade paket
composer audit --locked

# Hoppa över utvecklingsberoenden (nivån som på servern)
composer audit --no-dev

# Maskinläsbar utdata för utvärdering eller ärendesystem
composer audit --format=json > audit-$(date +%F).json

Hittar kommandot sårbarheter avslutas det med en felkod. Det är avsiktligt, för då avbryts en automatiserad build. Bedöm varje träff: Används paketet på servern, används den berörda funktionen, finns det en åtgärdad version?

# Vilka direkta beroenden är föråldrade?
composer outdated --direct
# Varför är ett visst paket installerat?
composer why vendor/paket
# Uppdatera riktat, med beroenden
composer update vendor/paket --with-dependencies

Testa varje uppdatering i en stagingmiljö. Säkerhetsuppdateringar inom samma huvudversion är oftast ukritiska, medan en ny huvudversion kan kräva anpassningar i koden.

Automatisera kontrollen

Ett engångsanrop hjälper föga, för nya sårbarheter blir kända fortlöpande. Bygg därför in composer audit på två ställen: i bygg-pipelinen vid varje ändring och i en regelbunden kontroll av produktionsnivån, även när koden inte ändras.

Ett enkelt skript för en daglig körning på bygg- eller kontrollservern kan se ut så här:

#!/bin/sh
# Daglig audit av den levererade nivån (anpassa sökvägen)
cd /srv/build/meine-anwendung || exit 1
if ! composer audit --locked --no-dev --format=plain > /var/log/composer-audit.log 2>&1; then
  logger -t composer-audit "Lücken in meine-anwendung gefunden, siehe /var/log/composer-audit.log"
fi

Skicka meddelandet från systemloggen vidare till er övervakning, er interna brevlåda eller ert ärendesystem. Viktigt är att någon är ansvarig för att bedöma meddelandena. En audit vars varningar ingen läser skyddar inte.

Tips

Ange i composer.json under config.platform.php den PHP-version som körs på servern. Då löser Composer bara upp paket som passar den nivån, och composer check-platform-reqs visar avvikelser.

Leverera rent: deployment utan biverkningar

Även vägen till servern påverkar säkerheten. Några grundregler har visat sig fungera:

  • Ta in composer.lock i förvaret och kör på servern bara composer install, aldrig composer update.
  • Installera med --no-dev så att test- och felsökningsverktyg inte hamnar på produktionsservern.
  • Håll mappen vendor/ utanför webbens rotkatalog så att den inte nås direkt via en URL.
  • Kör composer validate i bygget för att tidigt upptäcka felaktiga eller motsägelsefulla uppgifter.
composer validate --strict
composer install --no-dev --prefer-dist --classmap-authoritative --no-interaction

Var också uppmärksam på stödet för själva PHP-versionen. Bibliotek förutsätter allt oftare aktuella PHP-grenar. Den som fortfarande sitter fast på PHP 8.1 eller äldre får inga officiella uppdateringar för PHP självt längre och kan ofta inte installera nyare paketversioner med säkerhetsrättningar. Planeringen för det beskriver guiden PHP End of Life: risker med föråldrade versioner. Ramverksspecifika anvisningar finns under Säkra Laravel-applikationer.

Hur hjälper PHP SOS konkret?

  • Vi kartlägger nivån för alla beroenden och bedömer träffar efter faktisk användning.
  • Vi sätter upp automatiserade kontroller i bygget och i driften, med tydligt ansvar för fynd.
  • Vi planerar och testar uppdateringar, även när nya huvudversioner kräver anpassningar.
  • Vi granskar på begäran även egen kod och konfiguration, där inget automatiskt verktyg tittar.

En granskning av tredje part beskriver tjänsten Säkerhetsgranskning och penetrationstest.

Vanliga frågor

Hittar composer audit även PHP2Shell?

Nej. composer audit kontrollerar paketen i ert projekt, inte PHP-tolken på servern. PHP2Shell finns i PHP självt och åtgärdas bara genom en uppdatering av PHP och en omstart av alla PHP-processer.

Måste composer.lock ligga i förvaret?

För applikationer, ja. Lock-filen fastställer exakt vilka versioner som är installerade. Bara då kontrollerar composer audit den nivå som verkligen körs på servern, och varje deployment installerar samma versioner.

Vad gör jag om det inte finns någon uppdatering för ett berört paket?

Kontrollera om ert projekt över huvud taget använder den berörda funktionen och dokumentera bedömningen. Finns ingen rättning kan ett ersättningspaket, en egen patch eller ett tillfälligt skydd på servernivå komma i fråga.

Hur ofta bör jag köra composer audit?

Vid varje build och dessutom regelbundet, till exempel dagligen, även utan kodändringar. Nya sårbarheter rapporteras fortlöpande, och en nivå som var ren i går kan vara berörd i dag.

Källor

Direktkontakt

Varje timme räknas. Skriv till oss nu.

Beskriv kort system, PHP-version och observation. Vi hör av oss, klarlägger läget och arbetar på distans tills incidenten är avslutad och dokumenterad.

Direkthjälp