# phpinfo()-tiedostot: miksi niiden on poistuttava

> Unohtunut phpinfo-tiedosto paljastaa polut, moduulit ja toisinaan tunnuksia. Näin löydätte ja poistatte ne ja tarkistatte PHP:n turvallisemmin.

Lähde: https://phpsos.de/fi/blog/phpinfo-dateien-entfernen/  
Tilanne: 25.10.2026  
Palveluntarjoaja: PHP SOS, PHP-hätäapu ja palvelimen tietoturva. Pikaapu WhatsAppilla: https://wa.me/491736494914?text=Hei%20PHP%20SOS%2C%20tarvitsemme%20apua%20PHP-palvelimemme%20kanssa.%20Yritys%3A%20%E2%80%A6%20Verkkosivusto%3A%20%E2%80%A6

**Lyhyesti:** Tiedosto, joka vain kutsuu `phpinfo()`-funktiota, näyttää jokaiselle kävijälle PHP:n version, moduulit, polut ja asetukset, usein myös ympäristömuuttujat tunnuksineen. phpinfon tietoturvan kannalta pätee siksi: tällaisia tiedostoja ei jätetä pysyvästi verkkojuureen, ne poistetaan käytön jälkeen ja PHP:n tila tarkistetaan mieluummin paketinhallinnan ja konfiguraation kautta. PHP2Shellin korjaustilaa phpinfo-tuloste ei joka tapauksessa todista.

## Testitiedosto, joka jää

21.10.2026 alkaen tuhannet ylläpitäjät tarkistavat, mitä PHP-versiota heidän verkkosivustonsa tarjoilevat. Nopein tie on tuttu: luodaan tiedosto `info.php` yhdellä rivillä, avataan se selaimessa ja luetaan tulos. Se toimii. Ongelma alkaa sen jälkeen, kun tiedosto unohtuu.

Tällaiset tiedostot säilyvät yllättävän pitkään. Ne siirtyvät mukana muutoissa, päätyvät varmuuskopioihin ja ilmestyvät vuosien jälkeen hakemistoihin, joita kukaan ei enää tunne. Automaattiset skannerit kysyvät tyypillisiä tiedostonimiä jatkuvasti. Mikä oli ylläpitäjälle apuväline, on hyökkääjälle palvelimen rakennusohje.

Erityisesti kohteena ovat virastot ja hosting-yritykset, joilla on paljon asiakassivustoja. Joka tarkistaa kiireisellä viikolla kymmeniä verkkosivustoja, luo nopeasti kymmeniä testitiedostoja. Yksi ainoa unohtunut kansio riittää siihen, että tiedosto on haettavissa vielä kuukausien päästä.

## Mitä phpinfo() paljastaa ja miksi sillä on tietoturvamerkitystä

PHP-käsikirjan mukaan `phpinfo()` tulostaa PHP:n nykyisen tilan. Vakioilla voi ohjata, mitkä osat näkyvät; ilman määritystä näkyy kaikki.

| Alue (vakio) | Sisältö käsikirjan mukaan | Miksi arkaluonteinen |
|---|---|---|
| `INFO_GENERAL` | build, php.ini:n sijainti, verkkopalvelin, järjestelmä | paljastaa käyttöjärjestelmän ja polut |
| `INFO_CONFIGURATION` | kaikkien direktiivien paikalliset ja päätason arvot | näyttää, toimivatko `disable_functions` tai `open_basedir` |
| `INFO_MODULES` | ladatut laajennukset asetuksineen | hyökkääjät näkevät, mitkä funktiot ovat käytettävissä |
| `INFO_ENVIRONMENT` | ympäristömuuttujat | tässä on usein tietokannan tai API:n tunnuksia |
| `INFO_VARIABLES` | ennalta määritellyt muuttujat (Environment, GET, POST, Cookie, Server) | sisältää nykyisen pyynnön otsikot ja evästeet |

Vaarallisimmat ovat kaksi viimeistä riviä. Nykyaikaiset sovellukset lataavat tunnuksia mielellään ympäristömuuttujista, esimerkiksi `.env`-tiedostosta tai konttikonfiguraatiosta. Nämä arvot näkyvät silloin selkotekstinä tulosteessa. Miten tällaiset salaisuudet suojataan periaatteessa, kuvaa kirjoitus [Tunnusten ja .env-tiedostojen oikea suojaus](https://phpsos.de/fi/blog/env-dateien-schuetzen/).

Lisäksi: tuloste näyttää käynnissä olevan pyynnön arvot eli myös evästeet ja otsikot. Jos hyökkääjä voi ohjata kävijän sivulle ja lukea vastauksen, esimerkiksi toisessa kohdassa olevan Cross-Site-Scripting-aukon kautta, jopa HttpOnly-merkityt evästeet tulevat näkyviin.

## Miksi phpinfo ei todista PHP2Shelliä vastaan

Moni loi tiedoston juuri tarkistaakseen korjaustilan. Juuri siihen se sopii vain rajallisesti. Jakelut ja hosting-palveluntarjoajat asentavat korjaukset usein backportina; raporttien mukaan esimerkiksi Ubuntu 24.04 näyttää päivityksen jälkeenkin 8.3.6. Näytetty numero kertoo siis vähän. Päinvastoin, ajantasainen numero ei todista, että kaikki workerit on käynnistetty uudelleen.

Kestävä on paketin tila muutoslokin CVE-numeroineen, täydennettynä kaikkien PHP-prosessien uudelleenkäynnistyksellä. Miten se tehdään, selittää kirjoitus [PHP-version ja korjaustilan oikea tarkistus](https://phpsos.de/fi/php2shell/php-version-pruefen/).

Lyhytaikaisella tulosteella verkkokontekstissa on silti paikkansa: se näyttää, mitä php.ini-tiedostoa ja mitä arvoja verkkosivustolle todella sovelletaan, sillä komentorivi lukee usein toista konfiguraatiota. Tasojen ja ensisijaisuuden taustat selittää [php.ini selitettynä](https://phpsos.de/fi/php/php-ini-erklaert/). Jos tarvitsette tätä, tehkää se pääsysuojattuna, satunnaisella tiedostonimellä ja vain minuuteiksi.

Useimpiin kysymyksiin on joka tapauksessa parempia tapoja. FPM-poolin PHP-versio on sen konfiguraatiossa ja prosessilistassa. Yksittäisiä arvoja voi kysellä skriptillä verkkojuuren ulkopuolella funktiolla `ini_get()` paljastamatta kaikkea. Ja hosting-paneeleissa käyttöliittymä näyttää verkkosivustolle määrätyn version, joskin ilman tietoa backporteista.

## Unohtuneiden tiedostojen löytäminen: konkreettiset tarkistusvaiheet

Näin jäänteet löytyvät Linux-palvelimelta. Komennot vain lukevat eivätkä muuta mitään.

1. **Etsikää tiedostot, joissa on phpinfo-kutsu** (mukauttakaa polku):

```bash
grep -rlE "phpinfo[[:space:]]*\(" /var/www --include="*.php" 2>/dev/null
```

2. **Tarkistakaa tyypilliset tiedostonimet**, vaikka sisällössä ei olisi osumia:

```bash
find /var/www -type f \( -iname "info.php" -o -iname "phpinfo.php" -o -iname "test.php" -o -iname "i.php" \) 2>/dev/null
```

3. **Arvioikaa osumat:** Kaikki löydöt eivät ole testitiedostoja. Ylläpitotyökalut, paneelit tai kehykset voivat käyttää `phpinfo()`-funktiota kirjautumisen takana. Ratkaisevaa on, onko tiedosto saavutettavissa internetistä ilman kirjautumista.

4. **Katsokaa lokista käyttö**, ennen kuin poistatte:

```bash
grep -E "GET /(info|phpinfo|test|i)\.php" /var/log/nginx/access.log* 2>/dev/null | tail -n 50
```

5. **Poistakaa ja vaihtakaa salaisuudet:** Jos tulosteessa oli salasana tai avain ja tiedosto oli julkinen, arvo katsotaan tunnetuksi. Vaihtakaa se.

> **Vinkki:**
> Löytö, jonka luontipäivä on tuntematon ja jonka sisällössä on phpinfo-kutsun lisäksi jotain epäilyttävää, voi olla myös takaovi. Silloin ei pidä vain poistaa vaan varmistaa ja tarkistuttaa, katso [Web shellien tunnistaminen ja poisto](https://phpsos.de/fi/ratgeber/webshell-erkennen/).

## Pysyvä ennaltaehkäisy siivoamisen sijaan

Kolme toimenpidettä huolehtii siitä, ettei aihe palaa. Ensimmäinen: lisätkää `phpinfo` verkkokontekstin php.ini-tiedoston luetteloon `disable_functions`. Tarkistakaa ensin, tarvitseeko paneelinne funktiota tilasivuun. Miten asetus toimii ja missä sen rajat ovat, kerrotaan kirjoituksessa [disable_functions oikein käytettynä](https://phpsos.de/fi/ratgeber/disable-functions/).

```ini
; php.ini FPM:lle tai Apachelle, käynnistäkää sen jälkeen kaikki PHP-prosessit uudelleen
disable_functions = phpinfo
expose_php = Off
```

Toinen: toimitus vain kiinteän toimintatavan kautta, esimerkiksi Gitillä tai build-putkella, jotta yksittäisiä tiedostoja ei päädy käsin verkkojuureen. Kolmas: tilatiedot kuuluvat valvontaan tai inventaarioon, eivät julkiselle sivulle.

`expose_php = Off` poistaa lisäksi otsikon, jolla PHP ilmoittaa versionsa jokaisessa vastauksessa. Se ei korvaa päivitystä, mutta vie automaattisilta skannereilta kätevän tiedon. Joka antaa palvelinpääsyn usealle henkilölle, kannattaa lisäksi sopia yksinkertainen sääntö: testitiedostot poistetaan samassa työvaiheessa, jossa ne luodaan, eikä vasta ”myöhemmin”.

## Miten PHP SOS auttaa konkreettisesti?

- Käymme verkkojuurenne läpi phpinfo-tiedostojen, testiskriptien ja muiden jäänteiden varalta ja arvioimme jokaisen löydön.
- Analysoimme löydettyjen tiedostojen käytön ja kerromme, mitkä salaisuudet teidän kannattaa vaihtaa.
- Todistamme PHP2Shellin korjaustilan paketin muutoslokilla ja prosessin käynnistyksellä versionäytön sijaan.
- Toteutamme `disable_functions`, `expose_php` ja muut koventamistoimet pysyvästi [palvelimen koventamisen](https://phpsos.de/fi/leistungen/server-haertung/) puitteissa.

**Yhteenveto:** phpinfo-tiedosto luodaan sekunneissa ja unohdetaan yhtä nopeasti. Joka etsii ja poistaa sen nyt, sulkee tarpeettoman tietovuodon ja luottaa korjaustilan osalta kestäviin todisteisiin.


## Usein kysytyt kysymykset

**Onko phpinfo-tiedosto sinänsä tietoturva-aukko?**  
Se ei avaa pääsyä, mutta antaa hyökkääjille yksityiskohtaisen kuvauksen palvelimesta: versio, moduulit, polut, asetukset ja ympäristöstä riippuen myös ympäristömuuttujat. Se helpottaa kohdennettuja hyökkäyksiä ja voi paljastaa tunnuksia.

**Todistaako phpinfon versionumero, että PHP2Shell on korjattu?**  
Ei. Jakelut ja hosting-palveluntarjoajat asentavat korjaukset usein backportina, jolloin näytetty numero pysyy samana. Korjaustilan todistavat paketin muutosloki ja palveluntarjoajan vahvistus sekä kaikkien PHP-prosessien uudelleenkäynnistys.

**Mitä tehdä, jos phpinfo-tiedosto on ollut pitkään julkinen?**  
Poistakaa tiedosto, katsokaa Access-lokista, kuka sitä haki, ja vaihtakaa kaikki tulosteessa olleet salaisuudet, esimerkiksi ympäristömuuttujista tulleet tietokannan salasanat tai API-avaimet.

**Voinko kytkeä phpinfo():n kokonaan pois?**  
Kyllä, asetuksella disable_functions verkkokontekstin php.ini-tiedostossa. Tarkistakaa ensin, käyttääkö paneeli tai sovellus funktiota tilasivuihin, ja käynnistäkää PHP-prosessit sen jälkeen uudelleen.

## Lähteet

- [PHP-käsikirja: phpinfo()](https://www.php.net/manual/de/function.phpinfo.php)
- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
- [php.net: tietoturvailmoitukset](https://www.php.net/)
