Fil-qosor: mod_php huwa PHP bħala modulu fis-server tal-web Apache. Kull proċess ta' Apache imbagħad fih interpretatur sħiħ ta' PHP u jesegwixxi l-kodiċi PHP hu stess; l-SAPI tissejjaħ apache2handler. Huwa sempliċi biex jiġi stabbilit, imma jorbot lil PHP ma' Apache, normalment jeħtieġ il-prefork MPM u jippermetti kważi l-ebda separazzjoni bejn websajts. Il-manwal ta' PHP ma jirrakkomandahx għal installazzjonijiet ġodda, u ma' PHP2Shell it-tim ta' PHP jikklassifika r-riskju bħala l-ogħla ma' mod_php.
X'inhu mod_php?
Ma' mod_php, Apache jgħabbi PHP bħala modulu proprju fil-proċessi tiegħu. M'hemm l-ebda servizz separat ta' PHP: meta Apache jrid iwassal fajl .php, l-istess proċess li aċċetta t-talba jesegwixxi wkoll il-kodiċi PHP. Għal ħafna snin din kienet it-triq standard biex tħaddem PHP, u għadha mferrxa fuq servers eqdem u f'xi immaġini ta' Docker sal-lum.
Skont il-manwal ta' PHP, bħala modulu tas-server PHP taqra l-konfigurazzjoni tagħha darba biss, meta jinbeda s-server tal-web. Tibdiliet fil-php.ini u aġġornamenti tal-modulu għalhekk isiru effettivi biss wara restart ta' Apache.
Importanti biex wieħed jifhem: il-proċessi ta' Apache jgħixu żmien twil. Proċess jaċċetta ħafna konnessjonijiet wieħed wara l-ieħor qabel ma jiġi sostitwit; kemm, tirregola d-direttiva ta' Apache MaxConnectionsPerChild. L-interpretatur integrat ta' PHP jibqa' l-istess matul dan iż-żmien. Min jibdel il-librerija libphp fuq id-diska ma jibdel xejn fil-proċessi li jkunu qed jaħdmu.
Għall-maniġment u għar-responsabbli tal-proġetti dan jista' jinġabar hekk: ma' mod_php, is-server tal-web u PHP huma unità waħda. Min imiss waħda, jolqot lill-oħra. Aġġornament ta' PHP ifisser restart tas-server tal-web, żball f'PHP jaħdem bid-drittijiet tas-server tal-web, u separazzjoni bejn diversi websajts fuq l-istess server hija kważi impossibbli.
Kif jiġi integrat mod_php?
Il-manwal ta' PHP juri l-integrazzjoni f'żewġ passi: jgħabbu l-modulu u jiddefinixxu liema fajls PHP għandha tipproċessa.
LoadModule php_module modules/libphp.so
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
Il-manwal jirrakkomanda FilesMatch ma' SetHandler minflok AddType biss, biex fajls mtellgħa bħal bild.php.jpg ma jiġux eżegwiti bħala PHP. Taħt Debian u Ubuntu pakketti bħal libapache2-mod-php8.3 u l-kmandi a2enmod u a2dismod jieħdu f'idejhom dan ix-xogħol.
Jekk mod_php huwiex attiv jista' jiġi vverifikat bil-qari biss:
apachectl -M 2>/dev/null | grep -i php # Debian/Ubuntu
httpd -M 2>/dev/null | grep -i php # familja RHEL
apachectl -V | grep -i mpm # MPM attiv (prefork, worker, event)
Prefork, Thread Safety u riżorsi
Apache jqassam it-talbiet permezz ta' Multi-Processing-Module (MPM). Skont il-manwal ta' PHP, mod_php jeħtieġ il-prefork MPM, sakemm PHP ma tkunx inbniet b'Zend Thread Safety (--enable-zts). Il-biċċa l-kbira tal-pakketti tad-distribuzzjonijiet huma mibnija mingħajr Thread Safety.
Prefork ifisser: proċess wieħed għal kull konnessjoni simultanja, u kull proċess iġorr interpretatur sħiħ ta' PHP. Anki talbiet għal immaġini jew fajls CSS jokkupaw b'hekk proċess bi PHP fuq dahru. Dan jiswa memorja u jillimita t-tagħbija li server jista' jġorr.
| Karatteristika | mod_php | PHP-FPM |
|---|---|---|
| Fejn taħdem PHP? | f'kull proċess ta' Apache | f'servizz proprju |
| MPM ta' Apache | normalment prefork |
event possibbli |
| Utent għal kull websajt | le, kollox bħala utent ta' Apache | iva, għal kull pool |
| Restart ta' PHP | biss ma' Apache | indipendenti minn Apache |
| Settings għal kull direttorju | php_value f'.htaccess |
pool jew .user.ini |
Il-manwal għalhekk jirrakkomanda għall-installazzjonijiet moderni kollha PHP-FPM b'mod_proxy_fcgi: ġestjoni aħjar tar-riżorsi, separazzjoni tal-proċessi, restart ta' PHP mingħajr restart ta' Apache u kompatibbiltà mal-event MPM, li minn Apache 2.4 huwa l-istandard. Il-bażi tinsab taħt PHP-FPM spjegat.
Settings b'.htaccess, php_value u php_admin_value
Ma' mod_php, settings ta' PHP jistgħu jiġu ssettjati direttament fil-konfigurazzjoni ta' Apache. Il-manwal jiddistingwi hawnhekk bejn modalitajiet ta' bidla: entrati b'INI_PERDIR jistgħu jkunu f'php.ini, .htaccess jew httpd.conf, entrati b'INI_SYSTEM biss f'php.ini jew httpd.conf.
# Fil-konfigurazzjoni tal-VirtualHost: imsakkar għall-applikazzjoni
php_admin_flag display_errors off
php_admin_value upload_max_filesize 24M
# Possibbli f'.htaccess, imma l-applikazzjoni tista' tissorpassah
php_value max_execution_time 60
php_admin_value u php_admin_flag huma permessi biss fil-konfigurazzjoni tas-server, mhux f'.htaccess. Eżattament din id-distinzjoni hija importanti fil-miżuri temporanji dwar PHP2Shell, għax valuri bħal session.upload_progress.enabled ma jistgħux jerġgħu jiġu ssettjati mill-applikazzjoni.
mod_php u PHP2Shell: għaliex ir-riskju huwa l-ogħla
It-tim ta' PHP jikklassifika r-riskju minn PHP2Shell bħala l-ogħla ma' mod_php: hemmhekk intwera exploit qabel ma jibda jaħdem xi kodiċi tal-applikazzjoni. Plugins tas-sigurtà jew verifiki fiċ-CMS b'hekk jaslu tard wisq. Barra minn hekk, ma' mod_php, PHP taħdem bid-drittijiet u fil-memorja tas-server tal-web. Il-klassifikazzjoni dettaljata tinsab taħt Għaliex mod_php iġorr l-ogħla riskju.
Għall-operaturi għalhekk japplika:
- Aġġornaw il-modulu ta' PHP għal 8.5.12, 8.4.27, 8.3.36 jew 8.2.35 jew għal backport ikkonfermat.
- Erġgħu ibdew Apache kompletament, mhux biss reload, u kkontrollaw il-ħin tal-bidu tal-proċessi.
- Issettjaw valuri temporanji permezz ta'
php_admin_valuefil-konfigurazzjoni tas-server, jekk l-aġġornament ma jkunx possibbli għadu. - Wara ppjanaw it-tranżizzjoni għal PHP-FPM, kif deskritt taħt Assigurar ta' Apache b'mod_php.
Kif jgħin PHP SOS konkretament?
- Nagħrfu: Nivverifikaw fuq liema servers jaħdem mod_php, b'liema MPM u minn liema sors tal-pakketti.
- Nippatchjaw: Naġġornaw il-modulu ta' PHP, nerġgħu nibdew Apache kompletament u niddokumentaw l-istat.
- Nassiguraw it-tranżizzjoni: Fejn l-aġġornament huwa mblokkat, nissettjaw il-miżuri minn php.net b'mod imsakkar fil-konfigurazzjoni tas-server.
- Nibdlu: Fil-qafas tal-tisħiħ tas-server nimmigraw b'mod ittestjat għal PHP-FPM b'pools proprji.
Mistoqsijiet frekwenti
Għaliex jissejjaħ mod_php jekk il-modulu jisimha php_module?
mod_php huwa l-isem kollokwjali għal PHP bħala modulu ta' Apache. Fil-konfigurazzjoni jitgħabba b'LoadModule; il-manwal ta' PHP jagħti bħala eżempju LoadModule php_module modules/libphp.so. Verżjonijiet eqdem kienu jużaw ismijiet bħal php7_module jew php5_module.
Għaliex mod_php jeħtieġ il-prefork MPM?
Skont il-manwal ta' PHP, mod_php jeħtieġ il-prefork MPM sakemm PHP ma tkunx inbniet b'Zend Thread Safety. Il-biċċa l-kbira tal-pakketti tad-distribuzzjonijiet huma mibnija mingħajr Thread Safety. Prefork jibda proċess proprju għal kull konnessjoni simultanja, u dan jeħtieġ aktar memorja.
Linji php_value f'.htaccess jaħdmu wkoll ma' PHP-FPM?
Le. php_value u php_flag f'.htaccess huma direttivi ta' Apache tal-modulu ta' PHP u jaħdmu biss ma' mod_php. Taħt PHP-FPM settings bħal dawn jappartjenu fil-pool jew, għal valuri permessi, f'.user.ini.
Irrid inneħħi mod_php minnufih?
L-ewwel jiġi l-aġġornament ta' PHP b'restart sħiħ ta' Apache. Il-bidla għal PHP-FPM wara dan hija raġonevoli, imma għandha tiġi ppjanata u ttestjata. Ma tagħlaqx PHP2Shell, għax PHP-FPM hija wkoll affettwata.