Fil-qosor: Iz-Zend Engine hija l-qalba ta' PHP. Tittraduċi l-kodiċi PHP f'opcodes, teżegwihom f'magna virtwali u fl-istess ħin tamministra l-varjabbli u l-memorja. Minn PHP 4 'l hawn tinsab f'kull installazzjoni ta' PHP. Peress li l-vulnerabbiltajiet ta' PHP2Shell jinsabu f'din il-qalba, ma jgħinux plugins jew aġġornamenti taċ-CMS, imma biss PHP aġġornata b'restart.
X'inhi z-Zend Engine?
Iz-Zend Engine hija l-parti ta' PHP li tagħmel ix-xogħol effettiv. Kull ħaġa oħra, bħall-konnessjoni mas-server tal-web jew l-estensjonijiet għad-databases, tinbena fuqha. Tistgħu tqabbluha mal-magna ta' karozza: il-karrozzerija u t-tagħmir jvarjaw, il-magna tmexxi kollox.
Skont il-manwal ta' PHP, l-isem huwa magħmul mill-ismijiet tal-iżviluppaturi Zeev Suraski u Andi Gutmans. L-engine ġiet ippreżentata f'nofs l-1999 u minn PHP 4.0, li ħarġet f'Mejju 2000, saret il-qalba ta' PHP. Minn dak iż-żmien ġiet irrevedita sostanzjalment diversi drabi.
| Verżjoni ta' PHP | Engine | L-iktar bidla importanti skont il-manwal u l-RFCs |
|---|---|---|
| PHP 4.0 (2000) | Zend Engine | l-ewwel qalba komuni, prestazzjoni aħjar |
| PHP 5.0 (2004) | Zend Engine 2.0 | mudell ġdid tal-oġġetti |
| PHP 7.0 (2015) | Zend Engine 3.0 | PHPNG: strutturi tad-dejta aktar kompatti, AST |
| PHP 8.0 (2020) | Żvilupp ulterjuri | kompilatur JIT bħala parti minn OPcache |
Il-komponenti: kompilatur, magna virtwali, memorja
L-engine taħdem fi stadji ċari u separati. Minn PHP 7, skont l-RFC dwar is-siġra astratta tas-sintassi, hemm tliet fażijiet sal-bytecode:
- Lexer: ifarrak il-kodiċi sors f'tokens, pereżempju kliem ewlieni, ismijiet ta' varjabbli u ktajjen ta' karattri.
- Parser: jibni mit-tokens siġra astratta tas-sintassi (AST) li tirrappreżenta l-istruttura tal-programm.
- Kompilatur: joħloq mill-AST op-arrays, jiġifieri listi ta' opcodes, waħda għal kull fajl u funzjoni.
- Executor (Zend VM): jaħdem l-opcodes. Skont l-RFC tal-JIT, kull opcode għandu funzjoni handler li teżegwixxih.
- Ġestjoni tal-memorja: tirriżerva u teħles il-memorja għal kull talba u fl-istess ħin tissorvelja l-limitu minn
memory_limit.
It-tokens ta' skrip jistgħu jsiru viżibbli bl-estensjoni Tokenizer. Dan huwa bla ħsara u jgħallem:
<?php
$code = '<?php $summe = 2 + 3; echo $summe;';
foreach (token_get_all($code) as $token) {
if (is_array($token)) {
echo token_name($token[0]), ': ', trim($token[1]), "\n";
} else {
echo 'Zeichen: ', $token, "\n";
}
}
L-output juri entrati bħal T_VARIABLE: $summe jew T_LNUMBER: 2. Eżattament b'dawn il-blokok il-parser ikompli jaħdem.
Kif iz-Zend Engine tamministra l-varjabbli?
Kull varjabbli ta' PHP tinsab, skont il-manwal, f'kontenitur imsejjaħ zval. Fih it-tip u l-valur kif ukoll informazzjoni ta' ġestjoni, fosthom għadd ta' referenzi (refcount). Il-kontatur jindika kemm ismijiet ta' varjabbli jindikaw lejn l-istess kontenitur.
<?php
$a = str_repeat('x', 10);
$b = $a; // ebda kopja, it-tnejn jindikaw lejn l-istess valur
$b .= 'y'; // issa biss issir il-kopja (copy on write)
unset($a); // il-kontatur jinżel, il-memorja tinħeles meta jilħaq 0
Meta l-kontatur jilħaq żero, l-engine teħles il-memorja. Għal referenzi ċirkolari bejn l-oġġetti hemm ukoll garbage collector. Aktar dwar dan fl-artikolu Ġestjoni tal-memorja f'PHP.
Ir-reviżjoni PHPNG għal PHP 7 bdiet eżattament hawn. Skont l-RFC ta' Dmitry Stogov u Zeev Suraski, kien jitratta strutturi tad-dejta aktar kompatti u rappreżentazzjoni aktar għaqlija tal-valuri. L-RFC semma qligħ fil-prestazzjoni ta' 20 sa 110 fil-mija f'applikazzjonijiet reali.
OPcache u JIT: estensjonijiet tal-engine
Mingħajr cache l-engine tittraduċi kull skrip mill-ġdid ma' kull talba. L-OPcache iżomm l-opcodes lesti fil-memorja kondiviża. Minn PHP 8.0 'l quddiem hemm ukoll kompilatur JIT. Skont l-RFC, huwa bbażat fuq DynASM, għodda mill-proġett LuaJIT, u joħloq kodiċi tal-magna direttament mill-bytecode. Il-magna virtwali tibqa' bla bidla; il-JIT jissostitwixxi biss il-punti tad-dħul tal-handlers.
Għall-operaturi dan ifisser: OPcache u JIT iħaffu l-engine, imma ma jibdlu xejn fl-aġir tagħha fil-każ ta' żbalji. Vulnerabbiltà fil-qalba tibqa' teżisti anki b'cache attiva.
Għaliex vulnerabbiltajiet fl-engine jiżnu b'mod speċjali
Iż-żewġ vulnerabbiltajiet ta' PHP2Shell jinsabu fil-qalba ta' PHP. Fil-każ ta' CVE-2026-109618, kundizzjoni ta' out-of-memory tista' tinterrompi lill-engine waqt li d-dejta tat-talba tkun inizjalizzata biss parzjalment; fit-tindif dejta invalida mbagħad tiġi trattata bħala valida. Fil-każ ta' CVE-2026-109619, stat intern jibqa' wara li l-memorja tinħeles u jista' jintuża minn talba aktar tard fl-istess worker.
Il-verżjonijiet irranġati 8.5.12, 8.4.27, 8.3.36 u 8.2.35 jibdlu, skont il-manwal ta' PHP, ukoll l-aġir tal-limitu tal-memorja: memory_limit hemmhekk huwa limitu artab, setting ġdid memory_hard_limit_percent jistabbilixxi limitu massimu iebes. Il-manwal jindika li verżjoni li ma tafx dan is-setting hija affettwata mill-vulnerabbiltajiet. Fid-distribuzzjonijiet b'backports jgħodd ukoll il-changelog tal-pakkett.
L-engine hija mgħobbija f'kull proċess ta' PHP. Wara l-aġġornament għalhekk iridu jerġgħu jinbdew il-workers kollha ta' PHP-FPM, il-proċessi ta' Apache b'mod_php u servizzi oħra ta' PHP.
X'jiġri ġewwa meta tintlaħaq il-limitu tal-memorja jiddeskrivi l-artikolu memory_limit u Out-of-Memory. Il-klassifikazzjoni tal-vulnerabbiltà nnifisha tinsab taħt CVE-2026-109618.
Kif jgħin PHP SOS konkretament?
- Nivverifikaw il-verżjoni u l-istat tal-pakkett: Niddeterminaw liema stat tal-engine jaħdem tassew, inklużi l-backports tad-distribuzzjoni tagħkom.
- Naġġornaw u nerġgħu nibdew: Permezz tas-Servizz ta' patch għal PHP nitfgħu l-aġġornament u nikkontrollaw li ma jibqa' ebda proċess bil-kodiċi qadim.
- Nissettjaw il-limiti tal-memorja b'mod raġonevoli: Nallinjaw
memory_limit, il-limitu iebes il-ġdid u l-limiti tal-cgroup mal-applikazzjoni tagħkom. - Neżaminaw l-anomaliji: Kraxxijiet tal-workers jew proċessi b'exit status 137 niklassifikawhom u nivverifikaw jekk jistax ikun hemm attakk warajhom.
Mistoqsijiet frekwenti
Minn fejn ġie l-isem taz-Zend Engine?
L-isem huwa magħmul mill-ismijiet tal-iżviluppaturi tagħha: Zeev Suraski u Andi Gutmans. Skont il-manwal ta' PHP, l-engine ġiet ippreżentata f'nofs l-1999 u minn PHP 4.0, f'Mejju 2000, saret il-qalba ta' PHP.
Iz-Zend Engine hija prodott separat li jrid jiġi installat?
Le. Iz-Zend Engine hija parti fissa minn kull installazzjoni ta' PHP. Min jaġġorna PHP jaġġorna awtomatikament ukoll l-engine. Ma għandha x'taqsam xejn mal-prodotti kummerċjali tal-kumpanija Zend.
X'inhu opcode?
Opcode huwa kmand individwali għall-magna virtwali ta' PHP, pereżempju żieda, sejħa ta' funzjoni jew assenjazzjoni. Il-kompilatur jittraduċi kull skrip f'sekwenza ta' kmandi bħal dawn, li mbagħad l-engine taħdem wieħed wieħed.
X'għandha x'taqsam iz-Zend Engine ma' memory_limit?
L-engine tamministra l-memorja ta' kull talba u tħares il-limitu minn memory_limit. Mill-verżjonijiet tas-sigurtà tal-21/10/2026 'l quddiem, skont il-manwal, dan il-limitu huwa limitu artab, imtamm b'limitu iebes permezz ta' memory_hard_limit_percent.