Fil-qosor: Iċ-ċiklu tal-ħajja tat-talba ta' PHP għandu żewġ livelli. Darba għal kull proċess PHP jgħabbi l-estensjonijiet tiegħu (fażi MINIT) u fl-aħħar jiżżarmahom mill-ġdid (MSHUTDOWN). Għal kull talba individwali hemm fażi proprja ta' bidu u ta' tindif (RINIT u RSHUTDOWN). Fit-tħaddim tal-web worker wieħed jittratta ħafna talbiet wara xulxin, u għalhekk PHP irid jirrisettja b'mod affidabbli l-istat kollu tat-talba bejn żewġ talbiet. Eżatt f'dan il-konfini kien jinsab CVE-2026-109619, it-tieni vulnerabbiltà ta' PHP2Shell.
Żewġ livelli: il-proċess u t-talba
Għal min mhuwiex tekniku jgħin xbieha: worker ta' PHP huwa bħal sportell f'uffiċċju pubbliku. L-isportell jiġi mwaqqaf darba filgħodu, bil-formoli, it-timbri u l-kompjuter. Imbagħad jaslu ħafna viżitaturi wara xulxin. Wara kull viżitatur il-mejda trid tkun vojta, biex il-ħaddieħor ma jarax dokumenti ta' ħaddieħor.
PHP jaħdem eżatt hekk. Meta jibda proċess, jgħabbi estensjonijiet u issettjar li huma l-istess għat-talbiet kollha. Kull talba mbagħad tirċievi memorja proprja, varjabbli proprji u data proprja tat-talba bħal $_GET, $_POST jew $_FILES. Fi tmiem it-talba PHP jeħles din il-memorja. Il-PHP Internals Book jiġbor dan fil-qosor: PHP jinsa l-memorja tat-talba fi tmiem kull talba.
Il-fażijiet taċ-ċiklu tal-ħajja tat-talba ta' PHP f'ħarsa
L-ismijiet ġejjin minn ġewwa PHP; kull estensjoni tista' tidħol f'dawn il-fażijiet.
| Fażi | Meta taħdem | Kemm-il darba | Kompitu tipiku |
|---|---|---|---|
| MINIT (Module Init) | meta jibda l-proċess | darba għal kull proċess | tirreġistra estensjonijiet, toħloq entrati ini, data permanenti |
| GINIT | meta jinħolqu l-globals | għal kull proċess, f'threads għal kull thread | tipprepara varjabbli globali ta' estensjoni |
| RINIT (Request Init) | fil-bidu ta' kull talba | għal kull talba | tipprepara l-memorja u l-istat tat-talba |
| Eżekuzzjoni | bejniethom | għal kull talba | il-kodiċi PHP tagħkom jaħdem |
| RSHUTDOWN | fi tmiem kull talba | għal kull talba | teħles ir-riżorsi tat-talba |
| PRSHUTDOWN | wara RSHUTDOWN | għal kull talba, rarament użat | l-aħħar xogħlijiet ta' tindif |
| MSHUTDOWN | meta jintemm il-proċess | darba għal kull proċess | teħles data permanenti |
Sentenza importanti mill-PHP Internals Book għall-iżviluppaturi ta' estensjonijiet: il-globals ma jitbattlux awtomatikament wara kull talba. Dak li jrid ikun frisk għal kull talba jappartjeni fir-reset f'RINIT. Din ir-regola turi għaliex il-konfini bejn żewġ talbiet huwa post kritiku għas-sigurtà.
Fi tmiem talba l-ordni hija wkoll stabbilita: l-ewwel jaħdmu l-funzjonijiet ta' shutdown li rreġistrajtu b'register_shutdown_function(), imbagħad id-destructors, imbagħad il-buffer tal-output jiġi mbattal. Biss wara dan jiġi RSHUTDOWN.
Għaliex il-workers jerġgħu jintużaw
Fil-linja tal-kmand proċess jittratta talba waħda biss u jintemm. Fit-tħaddim tal-web dan kien jkun bil-mod wisq. PHP-FPM, Apache b'mod_php, LiteSpeed u FrankenPHP għalhekk iżommu workers lesti li jservu ħafna talbiet wara xulxin. MINIT imbagħad jaħdem darba, RINIT u RSHUTDOWN eluf ta' drabi. Kif FPM jikkontrolla l-workers tiegħu tispjegah PHP-FPM spjegat.
F'PHP-FPM pm.max_requests jistabbilixxi wara kemm talbiet worker jerġa' jibda. L-istandard huwa 0, jiġifieri bla limitu. Il-manwal isemmi l-issettjar bħala mezz kontra tnixxijiet tal-memorja f'libreriji ta' terzi:
; Pool ta' FPM: erġa' ibda l-worker wara 500 talba (kontra tnixxijiet tal-memorja)
pm = dynamic
pm.max_children = 20
pm.max_requests = 500
Il-modalità worker ta' FrankenPHP tmur anki aktar 'il bogħod: hemmhekk l-applikazzjoni kollha tibda darba u tibqa' fil-memorja. L-istat tal-applikazzjoni mbagħad jibqa' ħaj anki fil-livell ta' PHP. L-eżempju juri d-differenza:
<?php
function anfrageZaehler(): int
{
static $zaehler = 0; // fit-tħaddim klassiku ta' FPM għal kull talba terġa' 0
return ++$zaehler; // fil-modalità worker il-valur ikompli jgħodd matul it-talbiet
}
echo anfrageZaehler();
Fit-tħaddim klassiku t-telefonata dejjem toħroġ 1, għax PHP jiskarta l-memorja tat-talba. Fil-modalità worker il-valur jikber sakemm il-worker jgħix. Id-dokumentazzjoni ta' FrankenPHP għalhekk tagħti parir li l-istat marbut mat-talba jiġi rrisettjat apposta bejn talba u oħra.
Fejn jolqot CVE-2026-109619
CVE-2026-109619 ma jaffettwax il-kodiċi tal-applikazzjoni tagħkom, imma PHP innifsu. Skont php.net, stat intern li jappartjeni għat-talba seta' jibqa' ħaj wara li titħeles il-memorja tiegħu. Talba aktar tard fl-istess worker setgħet tużah qabel ma l-inizjalizzazzjoni rrisettjatu. Fix-xbieha: fuq il-mejda tal-isportell baqa' biċċa karta li kellha diġà tkun tneħħiet. Dettalji tal-isfruttament apposta ma nippubblikawhomx; il-klassifikazzjoni tinsab taħt CVE-2026-109619.
Il-miżuri temporanji ta' php.net għal din il-vulnerabbiltà jibdew minn modi kkonfermati, mhumiex protezzjoni sħiħa:
session.upload_progress.enabled=0f'php.ini, fil-pool ta' FPM jew fil-konfigurazzjoni tas-server, wara erġgħu ibdew il-workers kollha; mhux permezz ta'ini_set()jew.user.ini.- Fuq PHP 8.5 barra minn hekk
fatal_error_backtraces=0u restart. - Neħħu għal kull talba issettjar invalidu jew skadut li jipproduċi messaġġi qabel l-inizjalizzazzjoni. Li tinħeba biss il-messaġġi ma jgħinx, skont php.net.
- Irranġaw fl-applikazzjoni żbalji fatali u timeouts li jistgħu jinqalgħu minn barra, anki f'callbacks u fl-ipproċessar ta' uploads u importazzjonijiet.
Ir-rimedju veru huwa l-aġġornament għal PHP 8.5.12, 8.4.27, 8.3.36 jew 8.2.35. Peress li l-iżball jinsab fil-worker li jaħdem, jaħdem biss wara restart tal-proċessi kollha; il-passi jinsabu taħt Erġa' ibda PHP-FPM u l-workers kollha.
Wara r-restart iċċekkjaw b'ps -eo pid,lstart,cmd | grep php jekk il-proċessi kollha ta' PHP bdewx wara l-mument tal-aġġornament.
X'jfisser iċ-ċiklu tal-ħajja għat-tħaddim u għall-iżvilupp
Mill-mudell jistgħu jinkisbu regoli ċari. Għall-amministraturi: aġġornament huwa effettiv biss meta ma jibqax jaħdem l-ebda proċess bil-kodiċi qadim. Kull modalità ta' tħaddim b'workers li jgħixu fit-tul teħtieġ restart iddokumentat. Għall-iżviluppaturi: kodiċi li jaħdem f'modalitajiet worker m'għandux iħalli stat marbut mat-talba f'varjabbli statiċi jew singletons, pereżempju data tal-utent jew permessi. Għat-tnejn japplika: żommu l-logs mill-20 ta' Ottubru 2026, biex aktar tard tkun tista' tiġi evalwata jekk seħħx xi ħaġa qabel il-patch.
Kif jgħin PHP SOS konkretament?
Mas-Servizz ta' patch għal PHP napplikaw il-mudell fil-prattika:
- Niddeterminaw il-modalità tat-tħaddim: Nistabbilixxu jekk jaħdimx PHP-FPM, mod_php, LiteSpeed, FrankenPHP jew php-cgi u kif jiġu amministrati l-workers.
- Aġġornament u restart: Napplikaw il-verżjoni korretta u nerġgħu nibdew kull worker b'mod ikkontrollat.
- Verifika tal-proċessi: Nuru bi ħinijiet tal-bidu u verżjonijiet li ma baqa' l-ebda proċess qadim.
- Niċċekkjaw il-modalitajiet worker: F'applikazzjonijiet li jgħixu fit-tul nistħarrġu jekk l-istat marbut mat-talba jiġix irrisettjat b'mod nadif.
Mistoqsijiet frekwenti
PHP jibda proċess ġdid għal kull talba?
Fil-linja tal-kmand iva, fit-tħaddim tal-web ġeneralment le. PHP-FPM, Apache b'mod_php, LiteSpeed jew FrankenPHP iħallu proċess wieħed jittratta ħafna talbiet wara xulxin. Bejn talba u oħra PHP inaddaf l-istat tat-talba.
X'inhi d-differenza bejn MINIT u RINIT?
MINIT jaħdem darba meta jibda l-proċess ta' PHP, u joħloq strutturi permanenti. RINIT jaħdem fil-bidu ta' kull talba individwali u jipprepara dak li jeħtieġ biss din it-talba.
pm.max_requests jgħin kontra CVE-2026-109619?
php.net ma jsemmix restarts aktar frekwenti tal-workers bħala miżura temporanja. L-issettjar jillimita biss kemm talbiet jittratta worker qabel ma jerġa' jibda. Kontra l-vulnerabbiltà jgħin l-aġġornament segwit mir-restart tal-workers kollha.
X'inhi l-modalità worker ta' FrankenPHP?
Fil-modalità worker l-applikazzjoni tibda darba u tibqa' fil-memorja. Dan jiffranka l-ħin, imma varjabbli statiċi, globals u caches jibqgħu bejn talba u oħra. Skont id-dokumentazzjoni ta' FrankenPHP, l-istat marbut mat-talba għalhekk irid jiġi rrisettjat apposta.