Lühidalt: Sättega expose_php = Off failis php.ini kaob päis X-Powered-By: PHP/…. Selle juurde kuuluvad server_tokens off; Nginxis ning ServerTokens Prod ja ServerSignature Off Apache'is. See ei tee ühtegi serverit turvalisemaks, kuid võtab automatiseeritud skannimistelt valmis versiooniloendi. Oma paigaseisu kontrollite seejärel paketihalduse ja protsesside kaudu, mitte päiste kaudu.
Visiitkaart igas vastuses
Kes soovis pärast 21. oktoobrit 2026 teada, kui paljud serverid näitavad veel vana PHP versiooni, ei pidanud kaua otsima. Paljud veebiserverid nimetavad oma PHP versiooni igas üksikus vastuses, näiteks kujul X-Powered-By: PHP/8.2.20. Üleinternetilised otsinguteenused loevad neid andmeid kaasa ja Palo Alto Networksi Unit 42 luges PHP2Shelli kohta üle 22,6 miljoni avatud, potentsiaalselt haavatava instantsi.
Ründajatele on selline märge otsetee. Nad saavad sihtmärke eelsorteerida, selle asemel et pimesi proovida. Haldajatele on see seevastu kasutu, sest see ei tõenda isegi nende enda paigaseisu: distributsioonid tarnivad parandusi sageli tagasiportimisena ilma uue versiooninumbrita.
See artikkel näitab, kus PHP ja veebiserver versiooniteavet avaldavad ja kuidas neid andmeid välja lülitada. Samuti ütleb see ausalt, mida see annab ja mida mitte.
Kus versiooniandmed kõikjal ilmuvad
PHP versioon on vaid üks mitmest kohast. Täielik ülevaade tasub end ära, sest üksainus unustatud koht devalveerib teised meetmed.
| Leiukoht | Näide | Väljalülitamine |
|---|---|---|
| PHP HTTP-päis | X-Powered-By: PHP/8.3.x |
expose_php = Off failis php.ini |
| Veebiserveri HTTP-päis | Server: nginx/1.x või Server: Apache/2.4.x (Debian) |
server_tokens off; või ServerTokens Prod |
| Veebiserveri vealehed | versioonirida 404- või 500-lehtede all | samad sätted, Apache'is lisaks ServerSignature Off |
| Rakenduse päis | raamistike oma X-Powered-By-andmed |
fastcgi_hide_header või Header unset |
| Failid veebijuurkataloogis | phpinfo()-testifailid, readme- ja changelog-failid |
kustutada või blokeerida |
| PHP veateated | teed ja versiooniüksikasjad brauseris | display_errors = Off |
phpinfo()-testifailid on seejuures ründajatele kõige rikkalikum allikas. Need reedavad mitte ainult versiooni, vaid kogu konfiguratsiooni; rohkem artiklis phpinfo()-failid: miks need peavad kaduma.
expose_php väljalülitamine failis php.ini
PHP käsiraamatu järgi on expose_php vaikimisi sisse lülitatud ja muudetav ainult failis php.ini, mitte poolis, mitte .htaccess kaudu ja mitte töö ajal. Seadke väärtus seetõttu iga veebisaite väljastava töörežiimi failis php.ini, Debiani ja Ubuntu puhul näiteks kaustas /etc/php/<version>/fpm/ ning vajaduse korral /etc/php/<version>/apache2/.
; Veebi-SAPI php.ini, seejärel taaskäivitage PHP-FPM või Apache
expose_php = Off
Kui paralleelselt töötab mitu PHP versiooni, vajab igaüks oma kirjet. Vastava teenuse taaskäivitamine on kohustuslik, sest PHP loeb php.ini ainult käivitamisel.
Server-päiste lühendamine Nginxis ja Apache'is
Nginx nimetab oma versiooni vaikimisi päises Server ja vealehtedel. Käsuga server_tokens off; jääb alles ainult toote nimi. Lisaks saab rakenduse enda seatud päise X-Powered-By käsuga fastcgi_hide_header välja filtreerida. Nginxi dokumentatsiooni järgi peidab Nginx omal käel ainult Status ja X-Accel-…, mitte X-Powered-By.
# http-plokis, kehtib kõigile veebisaitidele
server_tokens off;
fastcgi_hide_header X-Powered-By;
Apache'is juhib ServerTokens päist Server ja samas ka versioonirida vealehtede all. Apache'i dokumentatsiooni järgi kehtib säte ainult serveriülesena, mitte VirtualHosti kaupa. Kuna PHP-FPM-i vastused jõuavad mod_proxy_fcgi kaudu teise päisetabelisse kui serveri enda vastused, seadke eemaldamine mõlemas variandis.
# serveriülene konfiguratsioon, nt /etc/apache2/conf-available/security.conf
ServerTokens Prod
ServerSignature Off
# vajab mod_headers
<IfModule mod_headers.c>
Header unset X-Powered-By
Header always unset X-Powered-By
</IfModule>
Kontrollige konfiguratsiooni enne uuesti laadimist käsuga nginx -t või apachectl configtest. Kuidas päiste kaudu külastajatele aktiivselt kaitset sisse lülitada, näiteks HSTS-i või Content-Security-Policy abil, kirjeldab juhend Veebisaitide turvapäised.
Nii kontrollite tulemust väljastpoolt
Kontrollige pärast ümberlülitust iga domeeni eraldi, võimalusel ka vealehte. Järgmised käsud saadavad ainult tavalisi päringuid teie enda veebisaitidele:
# Avalehe päised
curl -sI https://www.example.de/ | grep -iE '^(server|x-powered-by):'
# Olematu lehe päised
curl -sI https://www.example.de/gibt-es-nicht-4711 | grep -iE '^(server|x-powered-by):'
Oodatav on Server-päis ilma versiooninumbrita ja X-Powered-By puudumine. Kui seal on endiselt PHP versioon, on tavaliselt aktiivne mõni teine php.ini või teenust pole veel taaskäivitatud. Kui serveri ees on CDN, kontrollige lisaks päritoluserverit otse, kui see on kättesaadav.
Hoidke PHP versiooni sellegipoolest sisemiselt kirjas: serveri inventaris, paketiseisu ja viimase kontrolli kuupäevaga. Paigaseisu tõendate serveri kaudu, nagu on kirjeldatud artiklis PHP versiooni ja paigaseisu õige kontroll.
Mida peitmine annab ja mida mitte
Ausalt hinnatuna on versiooniandmete väljalülitamine väike meede väikese vaevaga. See vähendab tõenäosust ilmuda kindlate versioonide sihipärastes otsingutes ja kärbib infot, mida ründaja vaevata saab.
Kuid see ei kaitse automatiseeritud rünnakute eest, mis saadavad oma päringud lihtsalt igale kättesaadavale serverile. Kuidas sellised massiskannimised kulgevad, kirjeldab artikkel Massiskannimised paigata PHP vastu. PHP2Shelli vastu aitab ainult uuendus versioonile PHP 8.5.12, 8.4.27, 8.3.36 või 8.2.35 või kinnitatud tagasiportimine, millele järgneb kõigi PHP protsesside taaskäivitamine.
Kõrvalmõju on seevastu väga kasulik: kes lülitab versiooniandmed väljapoole välja, peab oma versioonid sisemiselt korrektselt kirja panema. PHP2Shelli-sarnases olukorras otsustab just see ülevaade, kui kiiresti te teate, millised serverid on mõjutatud.
Peitmine on seetõttu mõistlik osana põhikarastamisest, mitte üksikmeetmena. See kuulub samasse kontrollnimekirja nagu väljalülitatud veaväljund, kustutatud testifailid ja lukustatud konfiguratsiooniväärtused.
Kuidas PHP SOS konkreetselt aitab?
- Leiukohad kaardistada: kontrollime kõigi domeenide päiseid, vealehti ja veebijuurkataloogi versiooniandmete ja unustatud testifailide suhtes.
- Konfiguratsiooni kohandada: seame
expose_php, Server-päised ja päisefiltrid igas PHP versioonis ja igas veebiserveris ning taaskäivitame teenused kontrollitult. - Paigaseis sisemiselt tõendada: dokumenteerime versioonid ja paketiseisud seal, kuhu need kuuluvad, inventaris, mitte HTTP-päises.
- Põimida karastamisse: meede on osa meie PHP veebiserverite karastamisest.
Korduma kippuvad küsimused
Kas expose_php = Off teeb minu serveri turvaliseks?
Ei. Säte eemaldab ainult versiooniandmed HTTP-päisest. Haavatav PHP versioon jääb haavatavaks ja automatiseeritud rünnakud proovivad oma päringuid sageli niikuinii igal kättesaadaval serveril. Küll aga võtate ründajatelt lihtsa eelvaliku ja vähendate nähtavust serverite otsingumootorites.
Kas saan expose_php seada FPM-poolis või .htaccess kaudu?
PHP käsiraamatu järgi on expose_php muudetav ainult failis php.ini. Seadke väärtus seetõttu iga veebi-SAPI failis php.ini ja taaskäivitage seejärel PHP-FPM või Apache.
Miks ma näen X-Powered-By'd vaatamata expose_php = Off?
Siis seab päise tavaliselt rakendus või raamistik ise või on aktiivne mõni teine php.ini. Eemaldage päis lisaks veebiserveris: Nginxis käsuga fastcgi_hide_header, Apache'is käsuga Header unset.
Kuidas kontrollin oma paigaseisu, kui versioon pole enam nähtav?
Serveri enda kaudu: paketihaldus, paketi muudatuslogi CVE-numbritega ja PHP protsesside käivitusaeg. HTTP-päise andmed ei olnud niikuinii tõend, sest distributsioonid paigaldavad tagasiportimisi sageli ilma uue versiooninumbrita.