Εν ολίγοις: Στα Windows ενημερώνετε την PHP με το χέρι: λήψη της διορθωμένης έκδοσης από το php.net, επιλογή της ίδιας παραλλαγής (Thread Safe ή Non Thread Safe) και αρχιτεκτονικής, έλεγχος της λήψης με SHA-256, μεταφορά του php.ini και των επεκτάσεων, αλλαγή της διαδρομής και επανεκκίνηση όλων των διεργασιών PHP. Ιδιαίτερα επείγουσα είναι η ενημέρωση όταν το Apache στα Windows φορτώνει την PHP ως module, γιατί αυτόν τον τρόπο λειτουργίας η ομάδα PHP τον εκτιμά στο PHP2Shell ως τον υψηλότερο κίνδυνο.
Πού κρύβεται παντού η PHP σε υπολογιστές Windows
Οι διακομιστές Windows με PHP υπάρχουν συχνότερα απ' όσο νομίζουν πολλοί. Σπάνια πρόκειται για τον μεγάλο ιστότοπο, συχνά για intranet, εξειδικευμένες εφαρμογές ή εργαλεία που κάποιος έστησε πριν από χρόνια. Η λειτουργία υπό IIS περιγράφεται αναλυτικά στη σελίδα Θωράκιση της PHP στα Windows και στο IIS. Αυτό το άρθρο πραγματεύεται την ίδια την ενημέρωση και τις περιπτώσεις πέρα από το IIS.
Τυπικά σημεία εύρεσης είναι το Apache για Windows με PHP ως module, πακέτα προγραμματιστών όπως το XAMPP, το WampServer ή το Laragon που κατέληξαν σε έναν διακομιστή, δικά αντίγραφα της PHP σε εξειδικευμένες εφαρμογές και scripts PHP σε προγραμματισμένες εργασίες. Οι παρακάτω εντολές PowerShell απλώς διαβάζουν και βοηθούν στην εύρεση:
# Εύρεση όλων των php.exe στη μονάδα C: (σε μεγάλες μονάδες διαρκεί λίγο)
Get-ChildItem -Path C:\ -Filter php.exe -Recurse -ErrorAction SilentlyContinue |
Select-Object FullName, LastWriteTime
# Ποιο php.exe βρίσκεται στη διαδρομή αναζήτησης;
where.exe php
# Διεργασίες PHP και Apache που τρέχουν, με διαδρομή και χρόνο εκκίνησης
Get-Process php*, httpd -ErrorAction SilentlyContinue | Select-Object Name, Id, StartTime, Path
# Έκδοση και φορτωμένη διαμόρφωση μιας εγκατάστασης (η διαδρομή ως παράδειγμα)
& "C:\PHP\8.4\php.exe" -v
& "C:\PHP\8.4\php.exe" --ini
Σημαντικό: αν η PHP τρέχει ως module Apache, δεν υπάρχει δική της διεργασία PHP. Η PHP βρίσκεται τότε μέσα στη διεργασία httpd.exe. Όποιος ψάχνει μόνο για διεργασίες php-cgi, παραβλέπει αυτές τις εγκαταστάσεις.
Εύκολα ξεχνιούνται και οι προγραμματισμένες εργασίες που καλούν scripts PHP, για παράδειγμα για εισαγωγές, αναφορές ή συμφωνία δεδομένων. Χρησιμοποιούν συχνά ένα δικό τους, παλαιότερο php.exe. Για το PHP2Shell θεωρούνται λιγότερο εκτεθειμένες, επειδή η γραμμή εντολών δεν ανήκει, σύμφωνα με τις μέχρι τώρα πληροφορίες του php.net, στους επηρεαζόμενους τρόπους λειτουργίας· κατά την αντικατάσταση πρέπει παρ' όλα αυτά να δείχνουν στη νέα διαδρομή, αλλιώς η παλιά εγκατάσταση παραμένει σε χρήση και δεν αφαιρείται ποτέ.
# Προγραμματισμένες εργασίες που καλούν PHP
Get-ScheduledTask | Where-Object { $_.Actions.Execute -match 'php' } |
Select-Object TaskName, TaskPath, @{n='Programm';e={$_.Actions.Execute}}
Ξεχωριστό θέμα είναι οι υπολογιστές προγραμματιστών. Το XAMPP και παρόμοια πακέτα ξεκινούν το Apache με την PHP ως module και είναι συχνά προσβάσιμα σε όλο το δίκτυο της εταιρείας. Και εκεί πρέπει να ενημερωθεί η PHP και ο διακομιστής ιστού να ακούει μόνο στον δικό του υπολογιστή.
Thread Safe ή Non Thread Safe: η σωστή παραλλαγή
Το php.net προσφέρει κάθε έκδοση για Windows σε πολλές παραλλαγές. Για την αντικατάσταση ισχύει: ίδια παραλλαγή και αρχιτεκτονική με πριν, αλλιώς δεν φορτώνουν ο διακομιστής ιστού ή οι επεκτάσεις.
| Χαρακτηριστικό | Επιλογές | Πότε ποια |
|---|---|---|
| Ασφάλεια νημάτων | NTS (Non Thread Safe), TS (Thread Safe) | σύμφωνα με το php.net NTS για FastCGI, π.χ. IIS, και γραμμή εντολών· TS για PHP ως module στο Apache |
| Αρχιτεκτονική | x64, x86 | το php.net συνιστά x64 |
| Μεταγλωττιστής | VS16, VS17 | απαιτεί το Visual C++ Redistributable για Visual Studio 2015 έως 2022 |
Για την PHP 8.5 το php.net παρέθετε κατά την ανάκτηση στις 25.10.2026 την έκδοση 8.5.12 της 21.10.2026, ως αρχείο ZIP και στους τέσσερις συνδυασμούς. Τους υπόλοιπους υποστηριζόμενους κλάδους τους επιλέγετε στην ίδια σελίδα. Διορθωμένες είναι οι 8.5.12, 8.4.27, 8.3.36 και 8.2.35. Για την 8.1 και παλαιότερες δεν υπάρχουν πλέον επίσημες ενημερώσεις.
Ενημέρωση PHP στα Windows: έλεγχος της λήψης και καθαρή αντικατάσταση
- Κατεβάστε τη διορθωμένη έκδοση: από τη σελίδα λήψεων Windows του php.net, ανάλογα με παραλλαγή και αρχιτεκτονική.
- Συγκρίνετε το άθροισμα ελέγχου: το php.net αναφέρει για κάθε αρχείο μια τιμή SHA-256. Αν αποκλίνει, μη χρησιμοποιήσετε το αρχείο.
- Αποσυμπιέστε σε νέο φάκελο: για παράδειγμα
C:\PHP\8.4.27, ώστε το παλιό επίπεδο να διατηρηθεί ως οδός επιστροφής. - Μεταφέρετε τη διαμόρφωση: αντιγράψτε το προηγούμενο
php.iniκαι συγκρίνετέ το με το νέοphp.ini-production. - Ελέγξτε τις επεκτάσεις: Πρόσθετα αρχεία DLL τρίτων πρέπει να ταιριάζουν σε έκδοση, παραλλαγή και αρχιτεκτονική.
- Αλλάξτε τη διαδρομή: στην καταχώριση FastCGI, στη γραμμή
LoadModuleτου Apache ή στη μεταβλητή περιβάλλοντοςPATH. - Επανεκκινήστε και ελέγξτε: επανεκκινήστε την υπηρεσία διακομιστή ιστού και τις προγραμματισμένες εργασίες και μετά ελέγξτε έκδοση και χρόνους εκκίνησης.
# Υπολογισμός SHA-256 του αρχείου που κατεβάσατε και σύγκριση με το php.net
Get-FileHash .\php-8.5.12-nts-Win32-vs17-x64.zip -Algorithm SHA256
# Μετά την αλλαγή: φορτωμένες επεκτάσεις και έκδοση της νέας εγκατάστασης
& "C:\PHP\8.5.12\php.exe" -m
& "C:\PHP\8.5.12\php.exe" -v
Αν η PHP δεν ξεκινά μετά την αλλαγή ή αναφέρει DLL που λείπει, συχνά λείπει το Visual C++ Redistributable στην κατάλληλη αρχιτεκτονική ή μια επέκταση δεν ταιριάζει στη νέα έκδοση. Το σφάλμα φαίνεται πιο γρήγορα όταν καλέσετε το php.exe -v απευθείας στη γραμμή εντολών πριν αλλάξετε τον διακομιστή ιστού. Τι κάνουν οι επιμέρους καταχωρίσεις του php.ini, εξηγεί το Το php.ini εξηγείται.
Apache στα Windows: πάρτε στα σοβαρά τη λειτουργία module
Πολλές παλαιότερες εγκαταστάσεις Windows συνδέουν την PHP μέσω μιας γραμμής LoadModule απευθείας στο Apache. Τεχνικά αυτό είναι το ίδιο με το mod_php σε Linux. Η ομάδα PHP εκτιμά τον κίνδυνο του PHP2Shell ακριβώς εκεί ως τον υψηλότερο, επειδή δείχθηκε ένα exploit πριν καν τρέξει κώδικας εφαρμογής. Το υπόβαθρο θα βρείτε στο Γιατί το mod_php κινδυνεύει ιδιαίτερα.
Ποια modules φορτώνει ένα Apache, το δείχνει το httpd.exe -M στον φάκελο bin της εγκατάστασης· η εντολή απλώς διαβάζει. Αν εμφανίζεται εκεί module PHP, η ενημέρωση έχει προτεραιότητα. Μεσοπρόθεσμα αξίζει η αλλαγή σε PHP μέσω FastCGI με build NTS, ώστε η PHP να τρέχει σε δικές της διεργασίες. Αυτό απαιτεί δοκιμή, επειδή αλλάζουν διαμόρφωση και δικαιώματα.
Η αντικατάσταση των αρχείων δεν κλείνει ακόμη την ευπάθεια. Όσο η υπηρεσία Apache, τα application pools του IIS ή οι προγραμματισμένες εργασίες τρέχουν με την παλιά έκδοση, η ευπάθεια παραμένει ανοιχτή. Ελέγξτε μετά την ενημέρωση τον χρόνο εκκίνησης κάθε διεργασίας.
Μετά την ενημέρωση: έλεγχος και ίχνη
Καταγράψτε ανά εγκατάσταση διαδρομή, έκδοση, παραλλαγή και ημερομηνία της αλλαγής. Αφαιρέστε τους παλιούς φακέλους PHP μόνο όταν το νέο επίπεδο τρέχει σταθερά, και τότε πραγματικά, ώστε να μην ενσωματωθούν κατά λάθος ξανά.
Μια ενημέρωση δεν αφαιρεί κακόβουλο λογισμικό. Αν ένας διακομιστής Windows ήταν προσβάσιμος από το διαδίκτυο τις ημέρες πριν από το patch, ελέγξτε τους καταλόγους ιστού για νέα αρχεία script, τις προγραμματισμένες εργασίες και τους τοπικούς λογαριασμούς για άγνωστα στοιχεία και διασφαλίστε τα πρωτόκολλα του διακομιστή ιστού από τις 20 Οκτωβρίου. Πώς αναγνωρίζετε μια εισβολή, περιγράφει το Έχω ήδη παραβιαστεί;.
Πώς βοηθά συγκεκριμένα η PHP SOS;
- Εύρεση όλων των εγκαταστάσεων: Αναζητούμε την PHP στα συστήματα Windows σας, και σε modules Apache, πακέτα προγραμματιστών και εξειδικευμένες εφαρμογές.
- Αντικατάσταση και τεκμηρίωση: Μέσω της υπηρεσίας patch PHP μεταβαίνουμε στη διορθωμένη έκδοση, ελέγχουμε αθροίσματα ελέγχου και τεκμηριώνουμε έκδοση και εκκίνηση διεργασιών.
- Βελτίωση του τρόπου λειτουργίας: Όπου η PHP τρέχει ως module Apache, σχεδιάζουμε και δοκιμάζουμε τη μετάβαση σε FastCGI.
- Έλεγχος ιχνών: Διασφαλίζουμε πρωτόκολλα και ελέγχουμε τα συστήματα για ενδείξεις επίθεσης.
Συχνές ερωτήσεις
Ενημερώνει το Windows Update και την PHP;
Όχι. Η PHP δεν ανήκει στα Windows. Έρχεται ως αρχείο ZIP από το php.net, ως μέρος ενός πακέτου όπως το XAMPP ή με μια εξειδικευμένη εφαρμογή και πρέπει να ενημερωθεί κάθε φορά με αυτόν τον δρόμο.
Χρειάζομαι την έκδοση Thread Safe ή Non Thread Safe;
Σύμφωνα με το php.net, η NTS προορίζεται για FastCGI, δηλαδή για παράδειγμα για το IIS, και για τη γραμμή εντολών. Η TS προορίζεται για λειτουργία ως module στον διακομιστή ιστού, για παράδειγμα στο Apache. Στην ενημέρωση επιλέξτε την ίδια παραλλαγή με πριν.
Πώς ελέγχω αν η λήψη της PHP είναι γνήσια;
Το php.net αναφέρει για κάθε αρχείο των Windows ένα άθροισμα ελέγχου SHA-256. Με το Get-FileHash στο PowerShell υπολογίζετε το άθροισμα ελέγχου του αρχείου που κατεβάσατε και συγκρίνετε τις δύο τιμές χαρακτήρα προς χαρακτήρα.
Χρησιμοποιώ XAMPP σε έναν διακομιστή. Τι κάνω τώρα;
Πακέτα όπως το XAMPP φέρνουν δική τους PHP και δικό τους Apache, συχνά με την PHP ως module Apache. Ελέγξτε αν το έργο προσφέρει έκδοση με διορθωμένη PHP και αλλιώς μεταφέρετε την εγκατάσταση σε μια συντηρούμενη λύση. Για παραγωγική λειτουργία τέτοια πακέτα προγραμματιστών δεν προορίζονται ούτως ή άλλως.