Fil-qosor: L-estensjonijiet (Extensions) ta' PHP huma moduli bl-C li jżidu funzjonijiet ma' PHP, pereżempju drivers tad-database (PDO), ċifrar (Sodium, OpenSSL) jew il-cache tal-bytecode OPcache. Il-manwal ta' PHP jiddistingwi bejn estensjonijiet Core, Bundled, External u PECL. Jitgħabbew permezz ta' extension jew zend_extension fil-php.ini. Kull estensjoni taħdem fil-proċess ta' PHP bid-drittijiet tiegħu. Għalhekk japplika: għabbu biss dak li jinħtieġ, u aġġornawh flimkien ma' PHP.
X'inhuma l-PHP Extensions?
Il-qalba ta' PHP, iz-Zend Engine, tista' tesegwixxi kodiċi, imma ħafna minn dak li jeħtieġu l-applikazzjonijiet jinsab fl-estensjonijiet. Huma miktuba bl-C u jew jiġu kkompilati direttament f'PHP jew jitgħabbew meta tibda bħala librerija kondiviża (.so taħt Linux, .dll taħt Windows).
Importanti għal min jieħu d-deċiżjonijiet: l-estensjonijiet mhumiex plugins tal-applikazzjoni, imma parti mir-runtime ta' PHP. Jiġu installati mill-hoster jew mill-amministratur tas-server, mhux mill-aġenzija fiċ-CMS. Jekk estensjoni tonqos, l-applikazzjoni normalment tirrapporta żball waqt l-installazzjoni jew l-aġġornament.
Ukoll importanti hi d-distinzjoni mill-pakketti ta' Composer. Composer jinstalla libreriji miktuba bi PHP u li jinsabu fil-folder tal-proġett, pereżempju pakkett tal-posta jew tal-PDF. L-estensjonijiet min-naħa l-oħra huma kodiċi kkompilat li jitgħabba meta tibda PHP u japplika għall-applikazzjonijiet kollha fuq is-server. Ħafna pakketti ta' Composer jippreżupponu estensjonijiet speċifiċi u jinnotaw dan fil-composer.json tagħhom b'entrati bħal ext-intl jew ext-sodium. Min irid jivverifika jekk proġett isibx l-estensjonijiet meħtieġa kollha, jista' jesegwixxi composer check-platform-reqs fil-folder tal-proġett.
Liema tipi ta' estensjonijiet hemm?
Il-manwal ta' PHP jassenja l-estensjonijiet lil erba' gruppi:
| Grupp | Tifsira skont il-manwal | Eżempji mill-manwal |
|---|---|---|
| Core | Parti mill-qalba ta' PHP, ma jistgħux jintefgħu | Arrays, Date/Time, Hash, JSON, PCRE, SPL, Strings |
| Bundled | fornuti ma' PHP | BC Math, Ctype, Fileinfo, Filter, GD, intl, mbstring, PDO, Sessions |
| External | fornuti ma' PHP, jeħtieġu libreriji esterni | cURL, DOM, GMP, LDAP, OpenSSL, Sodium, Zip |
| PECL | disponibbli permezz ta' PECL, xi wħud b'libreriji esterni | APCu, Memcached, MongoDB, Yaml |
L-assenjazzjoni tista' tinbidel. Ma' PHP 8.4, skont il-paġna tar-rilaxx, l-estensjonijiet IMAP, OCI8, PDO_OCI u pspell tneħħew mill-pakkett fornut u ġew imċaqalqa għal PECL. Min jużahom jeħtieġ wara l-aġġornament installazzjoni separata, li wkoll trid tinżamm.
Kif jitgħabbew l-estensjonijiet?
Estensjonijiet kondiviżi jitgħabbew, skont il-manwal, permezz tad-direttiva extension fil-php.ini; estensjonijiet Zend, li jidħlu aktar fil-fond fl-engine, permezz ta' zend_extension. It-tnejn jistgħu jkunu biss fil-php.ini. Id-direttorju jiddefinih extension_dir, li għalih il-manwal jirrakkomanda mogħdija assoluta.
; estensjonijiet normali
extension=pdo_mysql
extension=sodium
extension=intl
; Estensjoni Zend: OPcache (għabbiha qabel Xdebug, jekk it-tnejn huma attivi)
zend_extension=opcache
Distribuzzjonijiet bħal Debian u Ubuntu jpoġġu għal kull estensjoni fajl żgħir .ini proprju fid-direttorju tal-iskanjar, pereżempju taħt /etc/php/8.3/mods-available/, u jattivawha għal kull SAPI b'phpenmod u phpdismod. Kif PHP taqra dawn il-fajls jispjega Il-php.ini spjegata.
L-estensjonijiet normalment jiġu installati permezz tal-ġestjoni tal-pakketti, pereżempju bħala pakkett php8.3-intl. L-estensjonijiet PECL jistgħu jinbnew b'pecl jew phpize. Skont il-manwal PECL huwa iddeprekat; jiġi rrakkomandat il-PHP Installer for Extensions (PIE). Min jibni PHP kompletament waħdu jsib indikazzjonijiet taħt Kompilazzjoni ta' PHP mill-kodiċi sors.
Verifika tal-estensjonijiet: liema huma verament imgħobbija?
Il-kmandi li ġejjin huma għall-qari biss. Innotaw li l-linja tal-kmand tista' tgħabbi estensjonijiet differenti mill-websajt.
php -m # Moduli tas-CLI
php-fpm8.3 -m # Moduli ta' PHP-FPM 8.3 (l-isem jiddependi mid-distribuzzjoni)
php --re sodium | head -n 5 # Funzjonijiet ta' estensjoni
php --ri opcache # Konfigurazzjoni ta' estensjoni
php -r 'var_dump(extension_loaded("intl"));'
Fil-kodiċi l-applikazzjonijiet jivverifikaw b'extension_loaded() jekk estensjoni hijiex preżenti, u b'get_loaded_extensions() liema huma mgħobbija:
<?php
$benoetigt = ['pdo_mysql', 'mbstring', 'intl', 'sodium'];
$fehlend = array_diff($benoetigt, array_map('strtolower', get_loaded_extensions()));
echo $fehlend ? 'Fehlt: ' . implode(', ', $fehlend) : 'Alle Erweiterungen vorhanden';
Estensjonijiet u sigurtà: inqas huwa aktar
L-estensjonijiet jaħdmu fl-istess proċess bħal PHP u bl-istess drittijiet. Żball f'estensjoni jista' għalhekk jiżen daqs żball fil-qalba. Minn dan joħorġu erba' regoli:
- Għabbu biss dak li jinħtieġ. Kull estensjoni addizzjonali tkabbar il-wiċċ ta' attakk. Ivverifikaw il-lista tagħkom kontra r-rekwiżiti tas-sistema tal-applikazzjoni.
- Aġġornawhom flimkien ma' PHP. Estensjonijiet fornuti jiġu mal-aġġornament ta' PHP. Estensjonijiet PECL u ta' terzi jeħtieġu aġġornamenti proprji u jridu jaqblu mal-verżjoni l-ġdida ta' PHP.
- Għodod tal-iżvilupp mhux fil-produzzjoni. Debuggers u profilers bħal Xdebug jappartjenu biss fl-ambjenti tal-iżvilupp.
- Issakkru l-funzjonijiet b'mod immirat. Fejn l-estensjonijiet iġibu funzjonijiet għal kmandi tas-sistema, jgħin Kif tużaw disable_functions sew.
Ma' PHP2Shell il-vulnerabbiltajiet jinsabu fil-qalba ta' PHP, mhux f'estensjoni. It-twaqqif ta' moduli ma jagħlaqhomx; meħtieġ huwa l-aġġornament għal 8.5.12, 8.4.27, 8.3.36 jew 8.2.35 b'restart tal-proċessi kollha ta' PHP. Wara l-aġġornament għandkom tivverifikaw jekk l-estensjonijiet kollha jerġgħux jitgħabbew, għax moduli nieqsa spiss jidhru biss ma' ċerti funzjonijiet. Kif iżżommu d-dipendenzi taħt kontroll fit-tul jiddeskrivi Żommu d-dipendenzi aġġornati.
Kif jgħin PHP SOS konkretament?
- Niġbru l-inventarju: Nelenkaw għal kull SAPI l-estensjonijiet mgħobbija kollha bl-oriġini u l-verżjoni.
- Ninnaddfu: Nqabblu l-lista mal-ħtieġa tal-applikazzjoni tagħkom u niddeżattivaw dak żejjed wara test.
- Naġġornaw: Fil-qafas tal-tisħiħ tas-server inġibu lil PHP u l-estensjonijiet kollha ta' terzi fuq stat aġġornat.
- Nivverifikaw wara l-aġġornamenti: Nikkontrollaw li wara kull aġġornament ta' PHP il-moduli meħtieġa kollha jerġgħu jkunu mgħobbija.
Mistoqsijiet frekwenti
X'inhi d-differenza bejn extension u zend_extension?
B'extension PHP tgħabbi estensjonijiet normali bħal drivers tad-database. B'zend_extension, skont il-manwal, jitgħabbew estensjonijiet Zend li jidħlu aktar fil-fond fl-engine, pereżempju OPcache jew Xdebug. Iż-żewġ direttivi jistgħu jkunu biss fil-php.ini.
Kif nara liema estensjonijiet huma mgħobbija?
Fuq il-linja tal-kmand b'php -m, għall-websajt permezz tal-funzjoni get_loaded_extensions() f'fajl ta' verifika għal żmien qasir jew permezz ta' php-fpm -m tal-verżjoni rispettiva. Innotaw li s-CLI u s-SAPI tal-web jistgħu jgħabbu estensjonijiet differenti.
X'inhu PECL u x'inhu PIE?
PECL huwa direttorju ta' estensjonijiet ta' PHP li jiġu pprovduti permezz tas-sistema tal-pakketti PEAR. Skont il-manwal ta' PHP, PECL huwa iddeprekat; minflok jiġi rrakkomandat il-PHP Installer for Extensions (PIE).
It-twaqqif ta' estensjoni jagħlaq PHP2Shell?
Le. Il-vulnerabbiltajiet ta' PHP2Shell jinsabu fil-qalba ta' PHP, mhux f'estensjoni li tista' titwaqqaf. Inqas estensjonijiet inaqqsu l-wiċċ ta' attakk b'mod ġenerali, imma ma jissostitwux l-aġġornament għal verżjoni rranġata.