Τρέχουσα κατάσταση: PHP2Shell. Δύο κρίσιμες ευπάθειες της PHP (CVSS 9.2) επιτρέπουν κακόβουλο κώδικα χωρίς σύνδεση. Patches από τις 21/10/2026.Τι πρέπει να γίνει τώρα →

Κατανόηση των επεκτάσεων PHP (extensions)

Οι επεκτάσεις φέρνουν στην PHP οδηγούς βάσεων δεδομένων, κρυπτογράφηση ή κρυφές μνήμες. Έτσι διαφέρουν τα είδη, έτσι τις φορτώνετε και τις ελέγχετε και τι σημαίνουν για ενημερώσεις και θωράκιση.

Ημερομηνία 5 λεπτά ανάγνωσηςΓνώση PHP

Εν συντομία: Οι επεκτάσεις PHP (extensions) είναι μονάδες σε C που συμπληρώνουν την PHP με λειτουργίες, όπως οδηγούς βάσεων δεδομένων (PDO), κρυπτογράφηση (Sodium, OpenSSL) ή την κρυφή μνήμη bytecode OPcache. Το εγχειρίδιο της PHP διακρίνει επεκτάσεις Core, Bundled, External και PECL. Φορτώνονται μέσω extension ή zend_extension στο php.ini. Κάθε επέκταση εκτελείται μέσα στη διεργασία PHP με τα δικαιώματά της. Γι' αυτό ισχύει: φορτώνετε μόνο ό,τι χρειάζεται και ενημερώνετε μαζί με την PHP.

Τι είναι οι επεκτάσεις PHP (extensions);

Ο πυρήνας της PHP, η Zend Engine, μπορεί να εκτελεί κώδικα, αλλά πολλά από όσα χρειάζονται οι εφαρμογές βρίσκονται σε επεκτάσεις. Είναι γραμμένες σε C και είτε μεταγλωττίζονται μόνιμα μέσα στην PHP είτε φορτώνονται κατά την εκκίνηση ως κοινόχρηστη βιβλιοθήκη (.so στο Linux, .dll στα Windows).

Σημαντικό για όσους αποφασίζουν: οι επεκτάσεις δεν είναι plugins της εφαρμογής, αλλά μέρος του περιβάλλοντος εκτέλεσης PHP. Τις εγκαθιστά ο πάροχος φιλοξενίας ή ο διαχειριστής διακομιστή, όχι η εταιρεία ανάπτυξης στο CMS. Αν λείπει μια επέκταση, η εφαρμογή αναφέρει συνήθως σφάλμα κατά την εγκατάσταση ή την ενημέρωση.

Εξίσου σημαντικός είναι ο διαχωρισμός από τα πακέτα Composer. Το Composer εγκαθιστά βιβλιοθήκες γραμμένες σε PHP, που βρίσκονται στον φάκελο του έργου, για παράδειγμα ένα πακέτο αλληλογραφίας ή PDF. Οι επεκτάσεις, αντίθετα, είναι μεταγλωττισμένος κώδικας, που φορτώνεται κατά την εκκίνηση της PHP και ισχύει για όλες τις εφαρμογές στον διακομιστή. Πολλά πακέτα Composer προϋποθέτουν συγκεκριμένες επεκτάσεις και το σημειώνουν στο composer.json τους με εγγραφές όπως ext-intl ή ext-sodium. Όποιος θέλει να ελέγξει αν ένα έργο βρίσκει όλες τις απαραίτητες επεκτάσεις, μπορεί να εκτελέσει στον φάκελο του έργου το composer check-platform-reqs.

Ποια είδη επεκτάσεων υπάρχουν;

Το εγχειρίδιο της PHP κατατάσσει τις επεκτάσεις σε τέσσερις ομάδες:

Ομάδα Σημασία σύμφωνα με το εγχειρίδιο Παραδείγματα από το εγχειρίδιο
Core μέρος του πυρήνα της PHP, δεν απενεργοποιείται Arrays, Date/Time, Hash, JSON, PCRE, SPL, Strings
Bundled διανέμονται με την PHP BC Math, Ctype, Fileinfo, Filter, GD, intl, mbstring, PDO, Sessions
External διανέμονται με την PHP, χρειάζονται εξωτερικές βιβλιοθήκες cURL, DOM, GMP, LDAP, OpenSSL, Sodium, Zip
PECL διαθέσιμες μέσω PECL, εν μέρει με εξωτερικές βιβλιοθήκες APCu, Memcached, MongoDB, Yaml

Η κατάταξη μπορεί να αλλάξει. Με την PHP 8.4 οι επεκτάσεις IMAP, OCI8, PDO_OCI και pspell αφαιρέθηκαν σύμφωνα με τη σελίδα έκδοσης από το πακέτο διανομής και μεταφέρθηκαν στο PECL. Όποιος τις χρησιμοποιεί, χρειάζεται μετά την αναβάθμιση ξεχωριστή εγκατάσταση, η οποία πρέπει επίσης να συντηρείται.

Πώς φορτώνονται οι επεκτάσεις;

Οι κοινόχρηστες επεκτάσεις φορτώνονται σύμφωνα με το εγχειρίδιο μέσω της οδηγίας extension στο php.ini· οι επεκτάσεις Zend, που επεμβαίνουν βαθύτερα στη μηχανή, μέσω του zend_extension. Και οι δύο επιτρέπεται να βρίσκονται μόνο στο php.ini. Τον κατάλογο ορίζει το extension_dir, για το οποίο το εγχειρίδιο συνιστά απόλυτη διαδρομή.

; κανονικές επεκτάσεις
extension=pdo_mysql
extension=sodium
extension=intl

; επέκταση Zend: OPcache (φόρτωση πριν από το Xdebug, αν και τα δύο είναι ενεργά)
zend_extension=opcache

Διανομές όπως το Debian και το Ubuntu τοποθετούν για κάθε επέκταση ένα μικρό δικό της αρχείο .ini στον κατάλογο σάρωσης, για παράδειγμα κάτω από το /etc/php/8.3/mods-available/, και την ενεργοποιούν ανά SAPI με τα phpenmod και phpdismod. Πώς διαβάζει η PHP αυτά τα αρχεία, εξηγεί η σελίδα Το php.ini εξηγημένο.

Οι επεκτάσεις εγκαθίστανται συνήθως μέσω της διαχείρισης πακέτων, για παράδειγμα ως πακέτο php8.3-intl. Οι επεκτάσεις PECL μπορούν να χτιστούν με pecl ή phpize. Σύμφωνα με το εγχειρίδιο το PECL έχει αποσυρθεί· συνιστάται το PHP Installer for Extensions (PIE). Όποιος χτίζει την PHP εξ ολοκλήρου μόνος του, θα βρει υποδείξεις στη σελίδα Μεταγλώττιση της PHP από τον πηγαίο κώδικα.

Έλεγχος επεκτάσεων: ποιες είναι πράγματι φορτωμένες;

Οι παρακάτω εντολές είναι αποκλειστικά μόνο για ανάγνωση. Λάβετε υπόψη ότι η γραμμή εντολών μπορεί να φορτώνει άλλες επεκτάσεις από τον ιστότοπο.

php -m                              # μονάδες του CLI
php-fpm8.3 -m                       # μονάδες του PHP-FPM 8.3 (όνομα ανά διανομή)
php --re sodium | head -n 5         # συναρτήσεις μιας επέκτασης
php --ri opcache                    # διαμόρφωση μιας επέκτασης
php -r 'var_dump(extension_loaded("intl"));'

Στον κώδικα οι εφαρμογές ελέγχουν με το extension_loaded() αν υπάρχει μια επέκταση και με το get_loaded_extensions() ποιες είναι φορτωμένες:

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

Επεκτάσεις και ασφάλεια: λιγότερα σημαίνει περισσότερα

Οι επεκτάσεις εκτελούνται στην ίδια διεργασία με την PHP και με τα ίδια δικαιώματα. Ένα σφάλμα σε μια επέκταση μπορεί γι' αυτό να έχει το ίδιο βάρος με ένα σφάλμα στον πυρήνα. Από αυτό προκύπτουν τέσσερις κανόνες:

  1. Φορτώνετε μόνο ό,τι χρειάζεται. Κάθε πρόσθετη επέκταση μεγαλώνει την επιφάνεια επίθεσης. Ελέγξτε τη λίστα σας με τις απαιτήσεις συστήματος της εφαρμογής.
  2. Ενημερώνετε μαζί με την PHP. Οι επεκτάσεις που συνοδεύουν την PHP έρχονται με την ενημέρωσή της. Οι επεκτάσεις PECL και τρίτων χρειάζονται δικές τους ενημερώσεις και πρέπει να ταιριάζουν με τη νέα έκδοση PHP.
  3. Εργαλεία ανάπτυξης όχι στην παραγωγή. Debuggers και profilers όπως το Xdebug ανήκουν μόνο σε περιβάλλοντα ανάπτυξης.
  4. Στοχευμένο κλείδωμα συναρτήσεων. Όπου οι επεκτάσεις φέρνουν συναρτήσεις για εντολές συστήματος, βοηθά η σελίδα Σωστή χρήση του disable_functions.

Στο PHP2Shell οι ευπάθειες βρίσκονται στον πυρήνα της PHP, όχι σε μια επέκταση. Η απενεργοποίηση μονάδων δεν τις κλείνει· απαραίτητη είναι η ενημέρωση στις 8.5.12, 8.4.27, 8.3.36 ή 8.2.35 με επανεκκίνηση όλων των διεργασιών PHP. Μετά την ενημέρωση πρέπει να ελέγξετε αν όλες οι επεκτάσεις φορτώνονται ξανά, διότι οι μονάδες που λείπουν γίνονται συχνά αντιληπτές μόνο σε συγκεκριμένες λειτουργίες. Πώς θα κρατάτε διαρκώς υπό έλεγχο τις εξαρτήσεις, περιγράφει η σελίδα Διατήρηση των εξαρτήσεων ενημερωμένων.

Πώς βοηθά συγκεκριμένα η PHP SOS;

  • Καταγραφή του υπάρχοντος: Απαριθμούμε ανά SAPI όλες τις φορτωμένες επεκτάσεις με προέλευση και έκδοση.
  • Εκκαθάριση: Συγκρίνουμε τη λίστα με τις ανάγκες της εφαρμογής σας και απενεργοποιούμε ό,τι περισσεύει μετά από δοκιμή.
  • Ενημέρωση: Στο πλαίσιο της θωράκισης διακομιστή φέρνουμε την PHP και όλες τις επεκτάσεις τρίτων σε συντηρούμενη κατάσταση.
  • Έλεγχος μετά τις ενημερώσεις: Ελέγχουμε ότι μετά από κάθε ενημέρωση της PHP όλες οι απαιτούμενες μονάδες φορτώνονται ξανά.

Συχνές ερωτήσεις

Ποια η διαφορά ανάμεσα στο extension και στο zend_extension;

Με το extension η PHP φορτώνει κανονικές επεκτάσεις όπως οι οδηγοί βάσεων δεδομένων. Με το zend_extension φορτώνονται σύμφωνα με το εγχειρίδιο επεκτάσεις Zend, που επεμβαίνουν βαθύτερα στη μηχανή, για παράδειγμα η OPcache ή το Xdebug. Και οι δύο οδηγίες επιτρέπεται να βρίσκονται μόνο στο php.ini.

Πώς βλέπω ποιες επεκτάσεις είναι φορτωμένες;

Στη γραμμή εντολών με το php -m, για τον ιστότοπο μέσω της συνάρτησης get_loaded_extensions() σε ένα προσωρινό αρχείο ελέγχου ή μέσω του php-fpm -m της εκάστοτε έκδοσης. Λάβετε υπόψη ότι το CLI και το SAPI ιστού μπορεί να φορτώνουν διαφορετικές επεκτάσεις.

Τι είναι το PECL και τι το PIE;

Το PECL είναι ένας κατάλογος επεκτάσεων PHP που παρέχονται μέσω του συστήματος πακέτων PEAR. Σύμφωνα με το εγχειρίδιο της PHP το PECL έχει αποσυρθεί· συνιστάται αντί γι' αυτό το PHP Installer for Extensions (PIE).

Κλείνει το PHP2Shell με την απενεργοποίηση μιας επέκτασης;

Όχι. Οι ευπάθειες του PHP2Shell βρίσκονται στον πυρήνα της PHP, όχι σε μια επέκταση που μπορεί να απενεργοποιηθεί. Λιγότερες επεκτάσεις μικραίνουν γενικά την επιφάνεια επίθεσης, δεν αντικαθιστούν όμως την ενημέρωση σε διορθωμένη έκδοση.

Πηγές

Άμεση επικοινωνία

Κάθε ώρα μετράει. Γράψτε μας τώρα.

Περιγράψτε σύντομα το σύστημα, την έκδοση PHP και ό,τι παρατηρείτε. Θα επικοινωνήσουμε μαζί σας, θα διευκρινίσουμε την κατάσταση και θα εργαστούμε εξ αποστάσεως μέχρι το περιστατικό να κλείσει και να τεκμηριωθεί.

Άμεση βοήθεια