Fil-qosor: Composer huwa l-ġestjoni tal-pakketti għal PHP. Jaqra mill-fajl composer.json liema libreriji jeħtieġ proġett, iniżżilhom fil-folder vendor, iżomm il-verżjonijiet eżatti fil-composer.lock u joħloq autoloader li jsib il-klassijiet awtomatikament. Composer għalhekk jamministra l-kodiċi tal-applikazzjoni tagħkom, mhux l-interpretatur ta' PHP nnifsu: aġġornament ta' Composer ma jagħlaqx vulnerabbiltà f'PHP bħal PHP2Shell.
X'inhu Composer u għalxiex jintuża?
Kważi l-ebda applikazzjoni PHP llum ma tikkonsisti biss minn kodiċi proprju. Frameworks, libreriji tal-posta, ġenerazzjoni ta' PDF jew konnessjonijiet tal-ħlas jiġu miżjuda bħala pakketti lesti. Composer, il-ġestjoni tal-pakketti għal PHP, jiżgura li dawn il-pakketti jingħaqdu f'verżjonijiet xierqa u li kull dipendenza ġġib magħha d-dipendenzi proprji tagħha.
Għal min jieħu d-deċiżjonijiet dan ifisser: parti kbira mill-kodiċi li jaħdem fuq is-server tagħkom joriġina minn terzi. Dan huwa effiċjenti, imma jeħtieġ manutenzjoni. Għall-amministraturi u l-iżviluppaturi dan ifisser: min juża Composer sew jista' f'kull ħin isegwi liema verżjoni ta' liema librerija taħdem fil-produzzjoni.
Is-sors standard għall-pakketti huwa, skont id-dokumentazzjoni ta' Composer, Packagist.org. Sorsi oħra, pereżempju repositorys interni ta' aġenzija, jistgħu jiddaħħlu fil-composer.json taħt repositories.
composer.json, composer.lock u vendor: it-tliet komponenti
Composer jaħdem b'tliet affarijiet li wieħed għandu jaf qabel ma jieħu server jew jinkariga aġenzija.
| Komponent | Kontenut | Jappartjeni fir-repository? |
|---|---|---|
composer.json |
pakketti mixtieqa b'firxiet ta' verżjonijiet (require, require-dev), regoli ta' autoload, settings |
iva |
composer.lock |
verżjonijiet eżatti solvuti tal-pakketti kollha, anki dawk indiretti | iva, skont id-dokumentazzjoni ta' Composer espliċitament |
vendor/ |
kodiċi mniżżel tal-pakketti u l-autoloader iġġenerat | le, jinħoloq mal-installazzjoni |
Taħt require jinsabu pakketti li l-applikazzjoni teħtieġ waqt it-tħaddim. Taħt require-dev jinsabu għodod għall-iżvilupp u t-testijiet, pereżempju frameworks tat-test jew analiżi statika. Din is-separazzjoni hija importanti, għax għodod tal-iżvilupp m'għandhom xejn x'jagħmlu fuq server tal-produzzjoni.
{
"require": {
"php": ">=8.3",
"monolog/monolog": "^3.0"
},
"require-dev": {
"phpunit/phpunit": "^11.0"
},
"autoload": {
"psr-4": { "App\\": "src/" }
}
}
Il-verżjonijiet fl-eżempju ntgħażlu biss għal skop ta' illustrazzjoni. Liema verżjonijiet jeħtieġ il-proġett tagħkom jirriżulta mir-rekwiżiti tiegħu.
install jew update: id-differenza fit-tħaddim
Iż-żewġ kmandi jinstemgħu simili, imma għandhom konsegwenzi differenti ħafna.
composer installjaqra l-composer.locku jinstalla eżattament il-verżjonijiet irreġistrati hemmhekk. Dan huwa riproduċibbli u jappartjeni fil-konsenja.composer updatejerġa' jsolvi d-dipendenzi kollha, iġib l-aħħar verżjonijiet li jaqblu u jerġa' jikteb il-composer.lock. Dan jappartjeni fl-iżvilupp, bit-testijiet li jsegwu.
Skont id-dokumentazzjoni ta' Composer, update wara l-kitba tal-fajl lock jwettaq ukoll verifika tas-sigurtà (audit), sakemm ma titfiex b'--no-audit. install ma jivverifikax awtomatikament; għal dan hemm l-għażla --audit.
Autoloading: kif Composer isib il-klassijiet
Composer joħloq il-fajl vendor/autoload.php. Hekk kif jiddaħħal darba, PHP tgħabbi kull klassi biss meta tkun meħtieġa. Għall-kodiċi proprju fit-taqsima autoload jiġi stabbilit liema namespace jinsab f'liema folder. Għal dan jiġi rrakkomandat PSR-4, standard tal-PHP-FIG. Kif jaħdem eżattament tispjega l-paġna Namespaces u autoloading; ħarsa ġenerali lejn l-istandards kollha tagħti l-paġna Standards PSR.
<?php
require __DIR__ . '/../vendor/autoload.php';
$log = new Monolog\Logger('app'); // jitgħabba awtomatikament meta jkun meħtieġ
Composer fil-produzzjoni: konsenja nadifa
Għall-konsenja ordni fissa wriet li taħdem tajjeb. L-aħjar taħdem f'pipeline tal-build u mhux bl-idejn fuq is-server.
- Nivverifikaw il-fajl lock:
composer validatejiżgura licomposer.jsonhuwa validu u l-composer.lockaġġornat. - Ninstallaw mingħajr pakketti tal-iżvilupp:
composer install --no-devjaqbeżrequire-dev. - Nottimizzaw l-autoloader:
--optimize-autoloader(qasir-o) jittrasforma r-regoli f'lista ta' klassijiet. B'--classmap-authoritativePHP tgħabbi klassijiet esklussivament minn din il-lista. - Verifika tas-sigurtà:
composer audit --lockedjivverifika l-verżjonijiet mill-fajl lock kontra avviżi tas-sigurtà magħrufa u jirrapporta pakketti abbandunati. - vendor barra mill-webroot: Biss il-folder pubbliku bl-iskrip ta' dħul għandu jintlaħaq permezz ta' URL.
composer validate
composer install --no-dev --optimize-autoloader
composer audit --locked --no-dev
composer outdated juri barra minn hekk liema pakketti installati għandhom verżjonijiet ġodda. Din hija l-bażi għal aġġornamenti ppjanati minflok azzjonijiet individwali frenetiċi.
Composer, sigurtà u PHP2Shell
Composer u PHP2Shell jolqtu żewġ livelli differenti. Il-vulnerabbiltajiet CVE-2026-109618 u CVE-2026-109619 jinsabu fl-interpretatur ta' PHP nnifsu. Ġew rranġati f'PHP 8.5.12, 8.4.27, 8.3.36 u 8.2.35, u l-proċessi kollha ta' PHP iridu jerġgħu jinbdew wara. Ebda composer update u ebda pakkett f'vendor ma jibdel xejn minn dan.
Madankollu Composer jappartjeni f'kull verifika wara inċident. Min iġib kodiċi malizzjuż fuq server jista' jibdel ukoll fajls f'vendor, u vendor/autoload.php jitgħabba ma' kull talba. composer install frisk mill-fajl lock ivverifikat f'direttorju vojt huwa għalhekk metodu tajjeb biex jerġa' jinbena l-istat tal-pakketti. Kif tivverifikaw regolarment id-dipendenzi għal vulnerabbiltajiet magħrufa jiddeskrivi l-gwida composer audit.
Riżultat ħadra ta' composer audit ma jgħid xejn dwar l-istat tal-patches ta' PHP. Ivverifikaw ir-runtime ta' PHP separatament, pereżempju bis-Servizz ta' patch għal PHP tagħna.
Kif jgħin PHP SOS konkretament?
- Niġbru għal kull applikazzjoni l-verżjoni ta' PHP, il-pakketti ta' Composer u l-istat tal-lock u nifirdu b'mod nadif bejn l-interpretatur u l-libreriji.
- Nivverifikaw jekk
vendoru l-fajl lock jaqblux ma' xulxin u jekk hemmx pakketti tal-iżvilupp jew fajls mibdula fil-produzzjoni. - Nistabbilixxu konsenja riproduċibbli b'
install --no-dev, autoloader ottimizzat u audit. - Wara inċident nerġgħu nibnu l-istat tal-pakketti mill-fajl lock ivverifikat u niddokumentaw ir-riżultat.
Mistoqsijiet frekwenti
Il-composer.lock jrid ikun fir-repository ta' Git?
Iva. Id-dokumentazzjoni ta' Composer tirrakkomanda espliċitament li l-composer.lock jiġi kommessjat. Hekk biss l-iżvilupp, is-CI u l-produzzjoni jinstallaw eżattament l-istess verżjonijiet tal-pakketti.
X'inhi d-differenza bejn composer install u composer update?
install jinstalla l-verżjonijiet irreġistrati fil-composer.lock. update jerġa' jsolvi d-dipendenzi, iġib verżjonijiet ġodda li jaqblu u jerġa' jikteb il-composer.lock. Fuq is-server tal-produzzjoni jappartjeni biss install.
Aġġornament ta' Composer jagħlaq il-vulnerabbiltà ta' PHP2Shell?
Le. Composer jamministra l-libreriji tal-applikazzjoni tagħkom, mhux l-interpretatur ta' PHP. PHP2Shell tingħalaq biss b'aġġornament tar-runtime ta' PHP għal verżjoni rranġata u r-restart tal-proċessi kollha ta' PHP.
Fejn għandu jkun il-folder vendor?
Idealment barra mid-direttorju tal-web li jintlaħaq pubblikament. Ħafna frameworks iqiegħdu fil-webroot biss folder public, filwaqt li vendor jinsab livell 'il fuq.