Praegune olukord: PHP2Shell. Kaks kriitilist PHP turvaauku (CVSS 9,2) lubavad kahjulikku koodi ilma sisselogimata. Paigad alates 21.10.2026.Mida nüüd teha →

expose_php ja Server-päised: versiooniandmete peitmine

PHP, Nginx ja Apache nimetavad oma versiooninumbrit vaikimisi igas vastuses. See ei kaitse rünnakute eest, kuid annab skanneritele mugava tabamusloendi. Nii lülitate selle välja ja säilitate ülevaate siiski.

Seis Lugemisaeg 5 minKarastamine ja seadistus

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.

Näpunäide

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.

Allikad

Kohene kontakt

Iga tund loeb. Kirjutage meile kohe.

Kirjeldage lühidalt süsteemi, PHP versiooni ja tähelepanekut. Võtame teiega ühendust, selgitame olukorra välja ja töötame kaugtööna, kuni intsident on lõpetatud ja dokumenteeritud.

Kohene abi