Fil-qosor: L-analiżi statika tivverifika l-kodiċi PHP mingħajr ma teżegwih u hekk issib żbalji tat-tipi, varjabbli mhux definiti, kodiċi mejjet u telefonati fuq valuri li possibbilment huma vojta. L-għodod komuni t-tnejn huma PHPStan (livelli tar-regoli minn 0 sa 10) u Psalm (livelli ta' żbalji minn 1 sa 8, flimkien ma' analiżi taint għal flussi ta' data mhux sikuri). Isibu żbalji fl-applikazzjoni tagħkom, mhux fl-interpretatur ta' PHP; kontra vulnerabbiltajiet bħal PHP2Shell jgħin biss l-aġġornament ta' PHP.
X'inhi l-analiżi statika?
Test jeżegwixxi l-kodiċi u jqabbel ir-riżultat. L-analiżi statika, min-naħa l-oħra, taqra l-kodiċi bħal reviżur bir-reqqa kbira u tikkonkludi mit-tipi, mill-valuri rritornati u mit-telefonati fejn xi ħaġa tista' tmur ħażin. Issib żbalji anki f'fergħat li l-ebda test qatt ma jilħaq.
Għal min jieħu d-deċiżjonijiet il-benefiċċju huwa sempliċi: żbalji li jinstabu qabel il-launch jiswew frazzjoni ta' żbalji li l-klijenti jinnutaw. Għall-iżviluppaturi hija sieħba kostanti li taħdem fl-ambjent tal-iżvilupp u fil-pipeline tas-CI. Jekk l-analiżi tindika xi ħaġa f'bidla, din ma tiġix aċċettata sakemm iż-żball jiġi rranġat. Hekk ma jikbirx legat ġdid, filwaqt li dak eżistenti jitnaqqas gradwalment. Flimkien mat-testijiet b'PHPUnit u Pest tifforma l-pedament tal-kwalità tal-kodiċi.
PHPStan: livelli tar-regoli minn 0 sa 10
PHPStan jiġi installat bħala dipendenza tal-iżvilupp u jeħtieġ PHP minn 7.4 biex jaħdem:
composer require --dev phpstan/phpstan
vendor/bin/phpstan analyse src tests
Mingħajr indikazzjoni oħra PHPStan jivverifika biss l-minimu meħtieġ. L-istrettezza tikkontrollawha permezz ta' ħdax-il livell, kull wieħed jinkludi dawk ta' taħtu:
| Livell | X'jiġi vverifikat addizzjonalment (għażla) |
|---|---|
| 0 | klassijiet u funzjonijiet mhux magħrufa, għadd ħażin ta' argumenti, varjabbli dejjem mhux definiti |
| 3 | tipi ta' ritorn u tipi li jiġu assenjati lil proprjetajiet |
| 5 | tipi tal-argumenti fit-telefonati ta' funzjonijiet u metodi |
| 6 | indikazzjonijiet tat-tipi nieqsa |
| 8 | telefonati ta' metodi u aċċessi għal proprjetajiet fuq valuri li jistgħu jkunu null |
| 10 | l-aktar trattament strett ta' mixed, anki fejn tipi huma nieqsa |
B'--level max dejjem jaħdem l-ogħla livell. Id-dokumentazzjoni madankollu twissi li aġġornament ta' PHPStan jista' mbagħad iġib ħafna messaġġi ġodda. Sejba tipika minn livell 8:
<?php
function kundenname(?Kunde $kunde): string
{
return $kunde->name(); // PHPStan: telefonata fuq valur li jista' jkun null
}
L-introduzzjoni ta' PHPStan mingħajr għargħar ta' żbalji: il-baseline
F'proġetti li kibru, PHPStan fuq livell għoli spiss jirrapporta mijiet ta' postijiet. Il-baseline issolvi l-problema: taħżen il-messaġġi eżistenti kollha f'fajl, u PHPStan minn dakinhar jirrapporta biss żbalji ġodda.
vendor/bin/phpstan analyse --level 6 src tests --generate-baseline
Il-fajl iġġenerat phpstan-baseline.neon tinkludu fil-konfigurazzjoni:
includes:
- phpstan-baseline.neon
parameters:
level: 6
paths:
- src
- tests
B'hekk il-legat jibqa' iddokumentat b'mod viżibbli, filwaqt li kodiċi ġdid irid ikun nadif mill-bidu.
Psalm u l-analiżi taint
Psalm għandu għanijiet simili għal dawk ta' PHPStan. Il-livelli jaħdmu bil-maqlub: 1 huwa l-aktar strett, 8 l-aktar ħafif, l-istandard huwa 2. Psalm jeħtieġ PHP minn 8.2 u jiġi stabbilit hekk:
composer require --dev vimeo/psalm
./vendor/bin/psalm --init
./vendor/bin/psalm --taint-analysis
L-analiżi taint hija speċjalment interessanti għas-sigurtà. “Taint” tfisser tniġġis: Psalm jimmarka data minn sorsi li attakkant jista' jikkontrolla, pereżempju $_GET, $_POST, $_COOKIE, $_REQUEST jew php://input. Imbagħad isegwi jekk din id-data tasalx mingħajr protezzjoni f'postijiet perikolużi, l-hekk imsejħa sinks: output b'echo, include, header jew mistoqsijiet SQL. Il-kategoriji integrati jinkludu fost oħrajn sql, html, shell, include, eval, ssrf u unserialize.
<?php
// Psalm jirrapporta fluss minn $_GET lejn l-output HTML (kategorija html)
echo 'Hallo ' . $_GET['name'];
// Irranġat: immaskra l-output skont il-kuntest
echo 'Hallo ' . htmlspecialchars($_GET['name'] ?? '', ENT_QUOTES, 'UTF-8');
Id-dokumentazzjoni ta' Psalm issemmi l-limiti miftuħ: l-analiżi tassumi li l-maskerar isir sewwa. Żbalji fini, pereżempju virgoletti nieqsa madwar attribut HTML, xorta jistgħu jħallu vulnerabbiltajiet. Psalm għalhekk jirrakkomanda mistoqsijiet parametrizzati għal SQL u templates konxji tal-kuntest għal HTML. Ir-riżultati jistgħu jinħarġu fil-format SARIF, li, fost oħrajn, GitHub Code Scanning jifhem.
Analiżi statika u sigurtà wara PHP2Shell
Hawn jixraq distinzjoni onesta. PHP2Shell, jiġifieri CVE-2026-109618 u CVE-2026-109619, jinsab fl-interpretatur ta' PHP. L-ebda għodda li taqra l-kodiċi tal-applikazzjoni tagħkom ma ssib dawn il-vulnerabbiltajiet, u l-ebda bidla fil-kodiċi ma taghlaqhom. Dan jagħmlu biss l-aġġornament għal PHP 8.5.12, 8.4.27, 8.3.36 jew 8.2.35.
Madankollu l-analiżi statika tikkontribwixxi għas-sigurtà, fi tliet postijiet:
- Kapaċità ta' upgrade: Issib kodiċi li ma jibqax jaħdem fuq verżjonijiet ġodda ta' PHP. B'hekk jonqos l-ostaklu biex wieħed jaqleb minn 8.1 jew 8.2 għal verżjoni appoġġata.
- Vulnerabbiltajiet proprji: L-analiżi taint issib toroq għal SQL injection, cross-site scripting jew inklużjoni ta' fajls. Il-proġett PHP jiċċara fil-politika tas-sigurtà tiegħu li input mhux ivverifikat lil funzjonijiet bħal
mysqli_query()mhuwiex żball ta' PHP, imma responsabbiltà tal-applikazzjoni. - Robustezza: Ħafna żbalji fatali jinqalgħu minn telefonati fuq null jew tipi ħżiena. php.net, b'rabta ma' CVE-2026-109619, jagħti parir espliċitu li żbalji fatali li jistgħu jinqalgħu minn barra jiġu rranġati fl-applikazzjoni.
L-analiżi statika ma tieħux post reviżjoni tal-kodiċi għas-sigurtà minn bnedmin, imma tagħmilha aktar effiċjenti, għax żbalji ta' rutina jkunu diġà ġew eliminati qabel.
Kif jgħin PHP SOS konkretament?
Bħala parti minn awditu tas-sigurtà u test ta' penetrazzjoni nipproċedu hekk:
- Waqqaf l-għodod: PHPStan jew Psalm b'livell adattat u baseline, integrati fil-pipeline eżistenti tagħkom.
- Evalwa s-sejbiet tas-sigurtà: Niċċekkjaw ir-riżultati tal-analiżi taint u nifirdu riskji reali minn allarmi foloz.
- Ħejji l-upgrade: Nuru liema postijiet jimblukkaw bidla għal verżjoni appoġġata ta' PHP.
- Ibgħat ir-riżultati: Tirċievu lista bi prijorità b'postijiet konkreti fil-kodiċi għat-tim jew għall-aġenzija tagħkom.
Mistoqsijiet frekwenti
X'inhi d-differenza bejn PHPStan u Psalm?
It-tnejn jivverifikaw it-tipi u jsibu żbalji mingħajr eżekuzzjoni. PHPStan jgħodd il-livelli tiegħu minn 0 (laxk) sa 10 (strett), Psalm minn 8 (laxk) sa 1 (strett). Psalm jiġi b'analiżi taint integrata għal problemi tas-sigurtà.
Nista' nintroduċi PHPStan f'proġett qadim?
Iva. B'baseline PHPStan jaħżen il-messaġġi eżistenti kollha f'fajl u wara jirrapporta biss żbalji ġodda. Hekk it-tim jibda mingħajr għargħar ta' żbalji u jnaqqas gradwalment il-legat.
L-analiżi statika ssib PHP2Shell?
Le. PHP2Shell jinsab fl-interpretatur ta' PHP, mhux fil-kodiċi tagħkom. Kontrih jgħin biss l-aġġornament ta' PHP. L-analiżi statika madankollu tgħin biex il-kodiċi jitħejja għal verżjonijiet ġodda ta' PHP, biex l-aġġornament isir possibbli aktar malajr.
Liema livell għandu jintgħażel?
Għall-bidu livell baxx mingħajr baseline jew livell ogħla b'baseline. Aktar importanti min-numru huwa li l-analiżi taħdem awtomatikament ma' kull bidla u ma tħallix żbalji ġodda jgħaddu.