Dabartinė padėtis: PHP2Shell. Du kritiniai PHP pažeidžiamumai (CVSS 9,2) leidžia vykdyti kenkėjišką kodą be prisijungimo. Pataisos nuo 2026-10-21.Ką dabar daryti →

PHP plėtiniai (extensions) paaiškinti

Plėtiniai į PHP atneša duomenų bazių tvarkykles, šifravimą ar talpyklas. Kuo skiriasi rūšys, kaip juos įkelti ir patikrinti ir ką jie reiškia atnaujinimams bei sutvirtinimui.

Būsena 4 min. skaitymoPHP žinios

Trumpai: PHP plėtiniai (extensions) yra C kalba parašyti moduliai, papildantys PHP funkcijomis, pavyzdžiui, duomenų bazių tvarkyklėmis (PDO), šifravimu (Sodium, OpenSSL) ar baitkodo talpykla OPcache. PHP vadovas skiria Core, Bundled, External ir PECL plėtinius. Jie įkeliami per extension arba zend_extension php.ini. Kiekvienas plėtinys veikia PHP procese su jo teisėmis. Todėl galioja: įkelti tik tai, ko reikia, ir atnaujinti kartu su PHP.

Kas yra PHP plėtiniai?

PHP branduolys, Zend Engine, gali vykdyti kodą, bet daug to, ko reikia programoms, slypi plėtiniuose. Jie parašyti C kalba ir arba tiesiogiai sukompiliuojami į PHP, arba paleidžiant įkeliami kaip bendrai naudojama biblioteka (.so sistemoje Linux, .dll sistemoje Windows).

Sprendimų priėmėjams svarbu: plėtiniai nėra programos papildiniai, o PHP vykdymo aplinkos dalis. Juos įdiegia hostingo teikėjas ar serverio administratorius, o ne agentūra CMS. Jei plėtinio trūksta, programa dažniausiai praneša apie klaidą diegiant ar atnaujinant.

Taip pat svarbus skirtumas nuo Composer paketų. Composer diegia bibliotekas, parašytas PHP kalba ir esančias projekto aplanke, pavyzdžiui, pašto ar PDF paketą. Plėtiniai, priešingai, yra sukompiliuotas kodas, kuris įkeliamas paleidžiant PHP ir galioja visoms serverio programoms. Daugeliui Composer paketų reikalingi tam tikri plėtiniai, ir tai jie nurodo savo composer.json įrašais, tokiais kaip ext-intl ar ext-sodium. Kas nori patikrinti, ar projektas randa visus reikiamus plėtinius, projekto aplanke gali vykdyti composer check-platform-reqs.

Kokių rūšių plėtinių būna?

PHP vadovas plėtinius skiria į keturias grupes:

Grupė Reikšmė pagal vadovą Pavyzdžiai iš vadovo
Core PHP branduolio dalis, neišjungiama Arrays, Date/Time, Hash, JSON, PCRE, SPL, Strings
Bundled pateikiami kartu su PHP BC Math, Ctype, Fileinfo, Filter, GD, intl, mbstring, PDO, Sessions
External pateikiami kartu su PHP, reikia išorinių bibliotekų cURL, DOM, GMP, LDAP, OpenSSL, Sodium, Zip
PECL prieinami per PECL, kai kurie su išorinėmis bibliotekomis APCu, Memcached, MongoDB, Yaml

Priskyrimas gali keistis. Su PHP 8.4, pasak leidimo puslapio, plėtiniai IMAP, OCI8, PDO_OCI ir pspell išimti iš komplekto ir perkelti į PECL. Kas juos naudoja, po atnaujinimo turi atskirai įdiegti, o tai taip pat reikia prižiūrėti.

Kaip plėtiniai įkeliami?

Pasak vadovo, bendrai naudojami plėtiniai įkeliami per direktyvą extension php.ini; Zend plėtiniai, giliau veikiantys variklį, per zend_extension. Abu gali būti tik php.ini. Katalogą nustato extension_dir, kuriam vadovas rekomenduoja absoliutų kelią.

; įprasti plėtiniai
extension=pdo_mysql
extension=sodium
extension=intl

; Zend plėtinys: OPcache (įkelti prieš Xdebug, jei aktyvūs abu)
zend_extension=opcache

Distribucijos, tokios kaip Debian ir Ubuntu, kiekvienam plėtiniui nuskaitymo kataloge sukuria atskirą mažą .ini failą, pavyzdžiui, /etc/php/8.3/mods-available/, ir jį kiekvienai SAPI aktyvuoja su phpenmod ir phpdismod. Kaip PHP šiuos failus nuskaito, paaiškina php.ini paaiškinta.

Plėtiniai dažniausiai diegiami per paketų valdymą, pavyzdžiui, kaip paketas php8.3-intl. PECL plėtinius galima sukompiliuoti su pecl ar phpize. Pasak vadovo, PECL paskelbtas pasenusiu; rekomenduojamas PHP Installer for Extensions (PIE). Kas PHP kompiliuoja visiškai pats, pastabų ras skyriuje PHP kompiliavimas iš pirminio kodo.

Plėtinių patikra: kurie tikrai įkelti?

Toliau pateiktos komandos yra grynai skaitančios. Atminkite, kad komandinė eilutė gali įkelti kitus plėtinius nei svetainė.

php -m                              # CLI moduliai
php-fpm8.3 -m                       # PHP-FPM 8.3 moduliai (pavadinimas priklauso nuo distribucijos)
php --re sodium | head -n 5         # plėtinio funkcijos
php --ri opcache                    # plėtinio konfigūracija
php -r 'var_dump(extension_loaded("intl"));'

Kode programos su extension_loaded() tikrina, ar plėtinys yra, o su get_loaded_extensions(), kurie įkelti:

<?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';

Plėtiniai ir saugumas: mažiau yra daugiau

Plėtiniai veikia tame pačiame procese kaip PHP ir su tomis pačiomis teisėmis. Todėl plėtinio klaida gali būti tokia pat sunki kaip branduolio klaida. Iš to kyla keturios taisyklės:

  1. Įkelti tik tai, ko reikia. Kiekvienas papildomas plėtinys didina atakos paviršių. Savo sąrašą patikrinkite pagal programos sistemos reikalavimus.
  2. Atnaujinti kartu su PHP. Kartu pateikiami plėtiniai ateina su PHP atnaujinimu. PECL ir trečiųjų šalių plėtiniams reikia savų atnaujinimų ir jie turi tikti naujajai PHP versijai.
  3. Kūrimo įrankių ne gamyboje. Derintuvai ir profiliuokliai, tokie kaip Xdebug, priklauso tik kūrimo aplinkoms.
  4. Funkcijas užrakinti tikslingai. Kur plėtiniai atneša funkcijas sistemos komandoms, padeda disable_functions teisingas naudojimas.

Esant PHP2Shell, spragos yra PHP branduolyje, o ne plėtinyje. Modulių išjungimas jų neuždaro; reikia atnaujinimo iki 8.5.12, 8.4.27, 8.3.36 ar 8.2.35 su visų PHP procesų paleidimu iš naujo. Po atnaujinimo reikėtų patikrinti, ar vėl įkelti visi plėtiniai, nes trūkstami moduliai dažnai paaiškėja tik naudojant tam tikras funkcijas. Kaip priklausomybes nuolat išlaikyti tvarkingas, aprašo Priklausomybių atnaujinimas.

Kaip PHP SOS padeda konkrečiai?

  • Inventorizacija: kiekvienai SAPI išvardijame visus įkeltus plėtinius su kilme ir versija.
  • Išretinimas: sąrašą suderiname su jūsų programos poreikiu ir po bandymo išjungiame nereikalingus.
  • Atnaujinimas: serverio sutvirtinimo rėmuose PHP ir visus trečiųjų šalių plėtinius pakeliame į prižiūrimą būseną.
  • Patikra po atnaujinimų: tikriname, kad po kiekvieno PHP atnaujinimo vėl įkelti visi reikalingi moduliai.

Dažni klausimai

Kuo skiriasi extension ir zend_extension?

Su extension PHP įkelia įprastus plėtinius, pavyzdžiui, duomenų bazių tvarkykles. Su zend_extension, pasak vadovo, įkeliami Zend plėtiniai, kurie giliau veikia variklį, pavyzdžiui, OPcache ar Xdebug. Abi direktyvos gali būti tik php.ini.

Kaip pamatyti, kurie plėtiniai įkelti?

Komandinėje eilutėje su php -m, svetainei per funkciją get_loaded_extensions() trumpam patalpintame patikros faile arba per atitinkamos versijos php-fpm -m. Atminkite, kad CLI ir žiniatinklio SAPI gali įkelti skirtingus plėtinius.

Kas yra PECL ir kas yra PIE?

PECL yra PHP plėtinių katalogas, teikiamas per PEAR paketų sistemą. Pasak PHP vadovo, PECL paskelbtas pasenusiu; vietoj jo rekomenduojamas PHP Installer for Extensions (PIE).

Ar išjungus plėtinį užsidaro PHP2Shell?

Ne. PHP2Shell spragos yra PHP branduolyje, o ne išjungiamame plėtinyje. Mažiau plėtinių apskritai sumažina atakos paviršių, bet neatstoja atnaujinimo į ištaisytą versiją.

Šaltiniai

Skubus kontaktas

Kiekviena valanda svarbi. Parašykite mums dabar.

Trumpai aprašykite sistemą, PHP versiją ir pastebėjimus. Mes atsakysime, išsiaiškinsime padėtį ir dirbsime nuotoliu, kol incidentas bus užbaigtas ir dokumentuotas.

Skubi pagalba