Go achomair: Seiceálann anailís statach cód PHP gan é a rith, agus aimsíonn sí ar an gcaoi sin earráidí cineáil, athróga gan sainmhíniú, cód marbh agus glaonna ar luachanna a d'fhéadfadh a bheith folamh. Is iad PHPStan (leibhéil rialacha 0 go 10) agus Psalm (leibhéil earráide 1 go 8, móide anailís taint do shreafaí sonraí neamhshábháilte) an dá uirlis is forleithne. Aimsíonn siad earráidí i d'fheidhmchlár, ní san ateangaire PHP; i gcoinne leochaileachtaí ar nós PHP2Shell ní chabhraíonn ach an nuashonrú PHP.
Cad é anailís statach?
Ritheann tástáil cód agus cuireann sí an toradh i gcomparáid. Léann anailís statach an cód, ar an láimh eile, ar nós cigire an-chúramach agus tuigeann sí ó chineálacha, ó luachanna fillte agus ó ghlaonna cá bhféadfadh rud a dhul amú. Aimsíonn sí earráidí fiú i mbrainsí nach sroicheann tástáil ar bith go deo.
Do lucht cinnteoireachta tá an tairbhe simplí: cosnaíonn earráidí a aimsítear roimh dul beo codán den mhéid a chosnaíonn earráidí a thugann custaiméirí faoi deara. D'fhorbróirí is compánach buan í a ritheann sa timpeallacht forbartha agus sa phíblíne CI. Má theipeann ar an anailís ar athrú, ní ghlactar leis an athrú go dtí go gceartaítear an earráid. Ar an gcaoi sin ní fhásann stoc nua seanualaí, agus baintear an stoc atá ann cheana céim ar chéim. In éineacht le tástálacha le PHPUnit agus Pest is bunús d'ardchaighdeán cóid í.
PHPStan: leibhéil rialacha ó 0 go 10
Suiteáiltear PHPStan mar spleáchas forbartha agus teastaíonn PHP ó 7.4 uaidh chun rith:
composer require --dev phpstan/phpstan
vendor/bin/phpstan analyse src tests
Gan sonrú breise ní sheiceálann PHPStan ach an t-íos. Rialaíonn tú an déine trí aon leibhéal déag, cuimsíonn gach ceann acu na cinn faoina bhun:
| Leibhéal | Cad a sheiceáiltear ar bharr (rogha) |
|---|---|
| 0 | aicmí agus feidhmeanna anaithnide, líon mícheart argóintí, athróga nach bhfuil sainithe riamh |
| 3 | cineálacha fillte agus cineálacha a shanntar d'airíonna |
| 5 | cineálacha argóintí i nglaonna feidhme agus modha |
| 6 | sonraí cineáil in easnamh |
| 8 | glaonna modha agus rochtain airíonna ar luachanna a fhéadfaidh a bheith null |
| 10 | láimhseáil is déine ar mixed, fiú nuair atá cineálacha in easnamh |
Le --level max ritheann an leibhéal is airde i gcónaí. Tugann an doiciméadú rabhadh, áfach, go bhféadfadh uasghrádú PHPStan a lán teachtaireachtaí nua a thabhairt ansin. Fionnachtain thipiciúil ó leibhéal 8:
<?php
function kundenname(?Kunde $kunde): string
{
return $kunde->name(); // PHPStan: glao ar luach a fhéadfaidh a bheith null
}
PHPStan a thabhairt isteach gan tuile earráidí: an baseline
I dtionscadail a d'fhás thar am, tuairiscíonn PHPStan ar leibhéal ard na céadta áit go minic. Réitíonn an baseline an fhadhb: stórálann sé gach teachtaireacht atá ann cheana i gcomhad, agus ina dhiaidh sin ní thuairiscíonn PHPStan ach earráidí nua.
vendor/bin/phpstan analyse --level 6 src tests --generate-baseline
An comhad a ghintear, phpstan-baseline.neon, cuireann tú isteach sa chumraíocht é:
includes:
- phpstan-baseline.neon
parameters:
level: 6
paths:
- src
- tests
Ar an gcaoi sin fanann an seanstoc doiciméadaithe go hinfheicthe, agus ní mór do chód nua a bheith glan ón tús.
Psalm agus an anailís taint
Tá spriocanna cosúla ag Psalm le PHPStan. Ritheann na leibhéil sa treo eile: is é 1 an leibhéal is déine, 8 an ceann is leithscéalaí, is é 2 an réamhshocrú. Teastaíonn PHP ó 8.2 ó Psalm agus socraítear é mar seo:
composer require --dev vimeo/psalm
./vendor/bin/psalm --init
./vendor/bin/psalm --taint-analysis
Tá an anailís taint spéisiúil go háirithe don tslándáil. Ciallaíonn “taint” truailliú: marcálann Psalm sonraí ó fhoinsí a fhéadfaidh ionsaitheoir a rialú, mar shampla $_GET, $_POST, $_COOKIE, $_REQUEST nó php://input. Ansin leanann sé an sroicheann na sonraí seo áiteanna contúirteacha gan chosaint, na sinceanna mar a thugtar orthu: aschur le echo, include, header nó ceisteanna SQL. I measc na gcatagóirí ionsuite tá sql, html, shell, include, eval, ssrf agus unserialize, i measc nithe eile.
<?php
// Tuairiscíonn Psalm sreabhadh ó $_GET isteach in aschur HTML (catagóir html)
echo 'Hallo ' . $_GET['name'];
// Ceartaithe: aschur a chosc de réir comhthéacs
echo 'Hallo ' . htmlspecialchars($_GET['name'] ?? '', ENT_QUOTES, 'UTF-8');
Luann doiciméadú Psalm na teorainneacha go hoscailte: glacann an anailís leis go ndéantar an cosc i gceart. Fós féin, d'fhéadfadh earráidí mínádúrtha, mar shampla comharthaí athfhriotail in easnamh timpeall tréithe HTML, leochaileachtaí a fhágáil. Molann Psalm dá bhrí sin ceisteanna paraiméadraithe do SQL agus teimpléid a bhfuil comhthéacs ar eolas acu do HTML. Is féidir torthaí a aschur san fhormáid SARIF, a thuigeann GitHub Code Scanning, i measc nithe eile.
Anailís statach agus slándáil tar éis PHP2Shell
Is fiú teorainn onórach a leagan síos anseo. Tá PHP2Shell, is é sin CVE-2026-109618 agus CVE-2026-109619, san ateangaire PHP. Ní aimsíonn aon uirlis a léann do chód feidhmchláir na leochaileachtaí seo, agus ní dhúnann aon athrú cóid iad. Ní dhéanann é sin ach an nuashonrú go PHP 8.5.12, 8.4.27, 8.3.36 nó 8.2.35.
Mar sin féin cuireann anailís statach le slándáil, i dtrí áit:
- Inuasghrádaitheacht: Aimsíonn sí cód nach n-oibríonn ar leaganacha nua PHP a thuilleadh. Laghdaíonn sé sin an bacainn ar aistriú ó 8.1 nó 8.2 go leagan tacaithe.
- Leochaileachtaí féin: Aimsíonn an anailís taint bealaí do SQL injection, Cross-Site-Scripting nó cuimsiú comhad. Soiléiríonn tionscadal PHP ina pholasaí slándála nach earráid de chuid PHP iad ionchuir nár seiceáladh a théann chuig feidhmeanna ar nós
mysqli_query(), ach go bhfuil siad faoi fhreagracht an fheidhmchláir. - Seasmhacht: Tagann a lán earráidí marfacha as glaonna ar null nó as cineálacha mícheart. Comhairlíonn php.net go sainráite i gcomhthéacs CVE-2026-109619 earráidí marfacha a fhéadfar a spreagadh ón taobh amuigh a cheartú san fheidhmchlár.
Ní thagann anailís statach in ionad athbhreithniú cóid slándála ag daoine, ach déanann sí níos éifeachtaí é, mar go bhfuil earráidí gnáthaimh scagtha amach roimh ré.
Conas a chabhraíonn PHP SOS go praiticiúil?
Mar chuid d'iniúchadh slándála agus tástáil threáite oibrímid mar seo:
- Uirlisí a shocrú: PHPStan nó Psalm le leibhéal oiriúnach agus baseline, ceangailte le do phíblíne atá ann cheana.
- Torthaí slándála a mheas: Seiceálaimid torthaí na hanailíse taint agus scarann muid fíorrioscaí ó thuaiscí bréige.
- Uasghrádú a ullmhú: Léirímid cé na háiteanna a chuireann bac ar aistriú go leagan PHP tacaithe.
- Torthaí a thabhairt thar: Faigheann tú liosta tosaíochta le háiteanna cóid nithiúla do d'fhoireann nó do d'ghníomhaireacht.
Ceisteanna coitianta
Cad é an difríocht idir PHPStan agus Psalm?
Seiceálann an bheirt cineálacha agus aimsíonn siad earráidí gan rith. Áiríonn PHPStan a leibhéil ó 0 (scaoilte) go 10 (docht), Psalm ó 8 (scaoilte) go 1 (docht). Tá anailís taint ionsuite ag Psalm do fhadhbanna slándála.
An féidir liom PHPStan a thabhairt isteach i seanthionscadal?
Is féidir. Le baseline stórálann PHPStan gach teachtaireacht atá ann cheana i gcomhad agus ní thuairiscíonn sé ach earráidí nua ina dhiaidh sin. Ar an gcaoi sin tosaíonn an fhoireann gan tuile earráidí agus déanann sí seanualaí a bhaint céim ar chéim.
An aimsíonn anailís statach PHP2Shell?
Ní aimsíonn. Tá PHP2Shell san ateangaire PHP, ní i do chód. Ní chabhraíonn ach nuashonrú PHP ina choinne. Cabhraíonn anailís statach, áfach, leis an gcód a ullmhú do leaganacha nua PHP, ionas gur féidir an nuashonrú a dhéanamh níos tapúla.
Cén leibhéal ba cheart a roghnú?
Don tús leibhéal íseal gan baseline nó leibhéal níos airde le baseline. Is tábhachtaí ná an uimhir go ritheann an anailís go huathoibríoch le gach athrú agus nach ligeann sí earráidí nua tríd.