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

Το SAPI εξηγημένο: πώς μιλά η PHP με τον διακομιστή ιστού

Το SAPI είναι η διεπαφή ανάμεσα στην PHP και τον διακομιστή ιστού. Καθορίζει πώς φτάνουν τα αιτήματα, ποιο php.ini ισχύει και τι πρέπει να επανεκκινηθεί μετά από μια ενημέρωση.

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

Εν συντομία: Το SAPI σημαίνει Server Application Programming Interface, τη διεπαφή μέσω της οποίας η PHP μιλά με το περιβάλλον της. Τυπικά SAPI είναι τα fpm-fcgi (PHP-FPM), apache2handler (mod_php), cgi-fcgi (php-cgi), litespeed και cli για τη γραμμή εντολών. Το SAPI καθορίζει πώς φτάνουν τα αιτήματα, ποιο php.ini ισχύει και ποιες διεργασίες πρέπει να επανεκκινηθούν μετά από μια ενημέρωση. Στο PHP2Shell από αυτό εξαρτάται ακόμη και η κατάταξη του κινδύνου.

Τι είναι ένα SAPI;

Η ίδια η PHP είναι ένα πρόγραμμα που εκτελεί κώδικα. Για να παραδίδει ιστοσελίδες, χρειάζεται σύνδεση με έναν διακομιστή ιστού, με τη γραμμή εντολών ή με κάποια άλλη εφαρμογή. Αυτή η σύνδεση είναι το SAPI. Δέχεται τα δεδομένα του αιτήματος, τα προωθεί στη Zend Engine και επιστρέφει την έξοδο.

Μπορεί κανείς να φανταστεί το SAPI σαν φις: ο κινητήρας παραμένει ο ίδιος, ανάλογα όμως με το φις προσαρμόζεται στον Apache, στον Nginx μέσω FastCGI, στο LiteSpeed ή στο τερματικό. Κάθε παραλλαγή έχει δικά της πλεονεκτήματα, δικούς της τρόπους διαμόρφωσης και δικές της παγίδες.

Το SAPI αποφασίζει κυρίως για τρία πράγματα που μετρούν στην καθημερινότητα:

  1. Μοντέλο διεργασιών: Εκτελείται η PHP μέσα στον διακομιστή ιστού, ως ξεχωριστή υπηρεσία με μόνιμους workers ή ως βραχύβια διεργασία ανά κλήση;
  2. Διαμόρφωση: Ποιο php.ini διαβάζεται και πού επιτρέπεται να βρίσκονται πρόσθετες ρυθμίσεις, για παράδειγμα στο .htaccess, σε ένα .user.ini ή στο pool του FPM;
  3. Δικαιώματα και διαχωρισμός: Με ποιον χρήστη εκτελείται ο κώδικας και μπορούν να διαχωριστούν πολλοί ιστότοποι μεταξύ τους;

Στα πάνελ φιλοξενίας τα SAPI εμφανίζονται με άλλα ονόματα. Το Plesk μιλά για παράδειγμα για χειριστές PHP όπως «FPM application», «FastCGI application» ή «Apache module». Εννοούνται οι ίδιοι τρόποι λειτουργίας που περιγράφει αυτή η σελίδα. Σε περίπτωση αμφιβολίας βοηθά το αρχείο ελέγχου παρακάτω, που δείχνει το πραγματικό όνομα του SAPI.

Ποια SAPI της PHP υπάρχουν;

Το εγχειρίδιο της PHP αναφέρει για το php_sapi_name(), μεταξύ άλλων, αυτές τις τιμές επιστροφής: apache, apache2handler, cgi (έως την PHP 5.3), cgi-fcgi, cli, cli-server, embed, fpm-fcgi, litespeed και phpdbg. Η λίστα δεν είναι ρητά εξαντλητική.

Όνομα SAPI Τρόπος λειτουργίας Τυπική χρήση Μοντέλο διεργασιών
fpm-fcgi PHP-FPM Nginx, Apache με proxy_fcgi, πάνελ φιλοξενίας ξεχωριστή υπηρεσία με pools workers
apache2handler mod_php παλαιότεροι διακομιστές Apache, απλά images Docker PHP μέσα στη διεργασία του Apache
cgi-fcgi php-cgi παλιές εγκαταστάσεις, ορισμένες διαμορφώσεις Windows διεργασία ανά αίτημα ή FastCGI
litespeed LSAPI διακομιστής LiteSpeed, πολλοί πάροχοι κοινόχρηστης φιλοξενίας δικές του διεργασίες PHP
cli γραμμή εντολών cronjobs, Composer, σενάρια συντήρησης μία διεργασία ανά κλήση
cli-server ενσωματωμένος διακομιστής ιστού μόνο τοπική ανάπτυξη (php -S) ένας διακομιστής ανάπτυξης
embed ενσωματωμένο PHP μέσα σε άλλα προγράμματα ανάλογα με το πρόγραμμα
phpdbg εργαλείο εντοπισμού σφαλμάτων αναζήτηση σφαλμάτων διαδραστικό

Το FrankenPHP είναι ένας σύγχρονος διακομιστής εφαρμογών που ενσωματώνει απευθείας την PHP. Επηρεάζεται επίσης από το PHP2Shell και έχει δικούς του δρόμους ενημέρωσης· λεπτομέρειες στη σελίδα Θωράκιση του FrankenPHP.

Έτσι ελέγχετε το SAPI του διακομιστή σας

Το SAPI ενός ιστότοπου το μαθαίνετε μόνο μέσω του διακομιστή ιστού, όχι μέσω της γραμμής εντολών. Αρκεί ένα μικρό αρχείο ελέγχου:

<?php
// sapi-check.php: διαγράψτε το αμέσως μετά την κλήση
header('Content-Type: text/plain');
echo PHP_SAPI, "\n", PHP_VERSION, "\n", php_ini_loaded_file(), "\n";

Στη γραμμή εντολών μπορούν να καταγραφούν, μόνο με ανάγνωση, οι εγκατεστημένες παραλλαγές και υπηρεσίες:

php -r 'echo PHP_SAPI, PHP_EOL;'          # πάντα "cli"
ls /usr/sbin/php-fpm* 2>/dev/null           # εγκατεστημένες εκδόσεις FPM
systemctl list-units --type=service | grep -i -E "php|lsws|apache2|httpd"
apachectl -M 2>/dev/null | grep -i php     # φορτωμένο mod_php;

Γιατί κάθε SAPI μπορεί να έχει δικό του php.ini

Σύμφωνα με το εγχειρίδιο της PHP, η PHP αναζητά πρώτα ένα αρχείο php-SAPI.ini, δηλαδή για παράδειγμα php-cli.ini, και μόνο μετά το php.ini. Διανομές όπως το Debian και το Ubuntu προχωρούν παραπέρα και δημιουργούν ξεχωριστούς φακέλους ανά SAPI, για παράδειγμα /etc/php/8.3/fpm/ και /etc/php/8.3/cli/.

Διαφέρει και η χρονική στιγμή: στις μονάδες διακομιστή η PHP διαβάζει τη διαμόρφωση σύμφωνα με το εγχειρίδιο μόνο μία φορά κατά την εκκίνηση του διακομιστή ιστού, στο CGI και στο CLI σε κάθε κλήση. Όποιος αλλάζει μια ρύθμιση πρέπει γι' αυτό να γνωρίζει ποιο SAPI επηρεάζεται. Περισσότερα στη σελίδα Το php.ini εξηγημένο.

SAPI και ασφάλεια: τι έδειξε το PHP2Shell

Σύμφωνα με τις αναφορές, το PHP2Shell επηρεάζει PHP-FPM, Apache με mod_php, php-cgi, FrankenPHP και LiteSpeed. Η ομάδα της PHP κατατάσσει τον κίνδυνο στο mod_php ως τον υψηλότερο, επειδή εκεί επιδείχθηκε exploit προτού εκτελεστεί κώδικας εφαρμογής. Οι λόγοι βρίσκονται στη σελίδα Γιατί το mod_php φέρει τον υψηλότερο κίνδυνο.

Για τη λειτουργία το SAPI σημαίνει κυρίως ένα πράγμα: καθορίζει τι πρέπει να επανεκκινηθεί μετά την ενημέρωση.

  1. PHP-FPM: όλα τα pools και οι workers κάθε εγκατεστημένης έκδοσης
  2. mod_php: ολόκληρη η υπηρεσία του Apache, όχι μόνο ένα reload
  3. php-cgi και διαμορφώσεις FastCGI: όλες οι εναπομείνασες διεργασίες PHP
  4. LiteSpeed: οι διεργασίες PHP του διακομιστή ιστού σύμφωνα με τις οδηγίες του κατασκευαστή
  5. CLI: δεν υπάρχουν μόνιμες διεργασίες, ενημερώστε όμως και το πακέτο, ώστε οι έλεγχοι να είναι σωστοί

Μεσοπρόθεσμα αξίζει η μετάβαση από το mod_php. Το εγχειρίδιο της PHP συνιστά για νέες εγκαταστάσεις Apache το PHP-FPM με mod_proxy_fcgi. Τα βασικά περιγράφει η σελίδα Το PHP-FPM εξηγημένο.

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

  • Καταγραφή των SAPI: Εντοπίζουμε για κάθε διακομιστή ποιοι τρόποι λειτουργίας και ποιες εκδόσεις PHP είναι πράγματι ενεργοί.
  • Σωστή επανεκκίνηση: Μέσω της υπηρεσίας PHP-Patch ενημερώνουμε κάθε SAPI και τεκμηριώνουμε την επανεκκίνηση όλων των διεργασιών.
  • Αντιστοίχιση διαμόρφωσης: Δείχνουμε ποιο php.ini και ποιες ρυθμίσεις pool ισχύουν για τον ιστότοπό σας.
  • Σχεδιασμός μετάβασης: Όπου εκτελείται mod_php ή php-cgi, σχεδιάζουμε και δοκιμάζουμε τη μετάβαση στο PHP-FPM.

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

Πώς μαθαίνω ποιο SAPI χρησιμοποιεί ο ιστότοπός μου;

Με τη μεγαλύτερη αξιοπιστία με ένα αρχείο ελέγχου που τοποθετείται για λίγο και εμφανίζει το PHP_SAPI ή το php_sapi_name(), καλούμενο μέσω του διακομιστή ιστού. Στη γραμμή εντολών λαμβάνετε πάντα cli, κάτι που δεν λέει τίποτα για τον ιστότοπο. Στη συνέχεια διαγράψτε αμέσως το αρχείο ελέγχου.

Ποιο SAPI είναι το ασφαλέστερο;

Κανένα δεν είναι από μόνο του ασφαλές. Το PHP-FPM προσφέρει όμως τα περισσότερα εργαλεία διαχωρισμού: ξεχωριστά pools, χρήστες και κλειδωμένες ρυθμίσεις ανά ιστότοπο. Το εγχειρίδιο της PHP συνιστά ρητά για νέες εγκαταστάσεις Apache το PHP-FPM αντί για mod_php.

Επηρεάζεται από το PHP2Shell η έκδοση της γραμμής εντολών της PHP;

Οι γνωστές αναφορές κατονομάζουν PHP-FPM, mod_php, php-cgi, FrankenPHP και LiteSpeed. Το CLI δεν επεξεργάζεται αιτήματα από το δίκτυο. Προέρχεται όμως συνήθως από την ίδια πηγή πακέτων και πρέπει πάντα να ενημερώνεται μαζί, έστω και για να δείχνουν οι εντολές ελέγχου τη σωστή κατάσταση.

Μπορεί ένας διακομιστής να χρησιμοποιεί ταυτόχρονα πολλά SAPI;

Ναι, μάλιστα είναι συνηθισμένο. Σχεδόν κάθε διακομιστής έχει, εκτός από το SAPI ιστού, και το CLI για cronjobs και συντήρηση. Συχνά εκτελούνται επιπλέον παράλληλα πολλές εκδόσεις PHP-FPM. Καθεμία από αυτές πρέπει να ενημερωθεί και να επανεκκινηθεί ξεχωριστά.

Πηγές

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

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

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

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