# Súbory phpinfo(): prečo musia zmiznúť

> Zabudnutý súbor phpinfo prezrádza cesty, moduly a niekedy aj prístupové údaje. Takto také súbory nájdete, odstránite a PHP skontrolujete bezpečnejšie.

Zdroj: https://phpsos.de/sk/blog/phpinfo-dateien-entfernen/  
Stav: 25.10.2026  
Poskytovateľ: PHP SOS, Núdzová pomoc pri PHP a bezpečnosť serverov. Okamžitá pomoc cez WhatsApp: https://wa.me/491736494914?text=Dobr%C3%BD%20de%C5%88%2C%20PHP%20SOS%2C%20potrebujeme%20pomoc%20s%20na%C5%A1%C3%ADm%20serverom%20s%20PHP.%20Spolo%C4%8Dnos%C5%A5%3A%20%E2%80%A6%20Web%3A%20%E2%80%A6

**Stručne:** Súbor, ktorý len volá `phpinfo()`, ukazuje každému návštevníkovi verziu, moduly, cesty a nastavenia PHP, často aj premenné prostredia s prístupovými údajmi. Pre bezpečnosť phpinfo preto platí: také súbory nikdy nenechávať trvalo vo webovom koreni, po použití ich zmazať a stav PHP radšej kontrolovať cez správu balíkov a konfiguráciu. Stav záplat proti PHP2Shell výstup phpinfo aj tak nedokladá.

## Testovací súbor, ktorý zostane

Od 21. 10. 2026 kontrolujú tisíce administrátorov, akú verziu PHP ich weby doručujú. Najrýchlejšia cesta je známa: vytvoriť súbor `info.php` s jediným riadkom, otvoriť ho v prehliadači, prečítať výsledok. Funguje to. Problém začína potom, keď sa na súbor zabudne.

Takéto súbory prežívajú prekvapivo dlho. Presúvajú sa pri sťahovaní, končia v zálohách a po rokoch sa objavia v priečinkoch, ktoré už nikto nepozná. Automatizované skenery sa neustále pýtajú na typické názvy súborov. Čo bolo pre administrátora pomôckou, je pre útočníka stavebný plán servera.

Obzvlášť postihnuté sú agentúry a hostingy s mnohými webmi zákazníkov. Kto v hektickom týždni kontroluje desiatky webov, rýchlo vytvorí desiatky testovacích súborov. Stačí jediný zabudnutý priečinok a súbor je dostupný ešte o mesiace.

## Čo phpinfo() prezrádza a prečo to z hľadiska bezpečnosti záleží

Podľa príručky PHP vypisuje `phpinfo()` aktuálny stav PHP. Pomocou konštánt sa dá riadiť, ktoré časti sa zobrazia; bez zadania je to všetko.

| Oblasť (konštanta) | Obsah podľa príručky | Prečo je citlivá |
|---|---|---|
| `INFO_GENERAL` | build, umiestnenie php.ini, webserver, systém | prezrádza operačný systém a cesty |
| `INFO_CONFIGURATION` | lokálne a master hodnoty všetkých direktív | ukazuje, či `disable_functions` alebo `open_basedir` zaberajú |
| `INFO_MODULES` | načítané rozšírenia s nastaveniami | útočníci vidia, ktoré funkcie sú k dispozícii |
| `INFO_ENVIRONMENT` | premenné prostredia | často tu sú prístupové údaje k databáze alebo API |
| `INFO_VARIABLES` | preddefinované premenné (Environment, GET, POST, Cookie, Server) | obsahuje hlavičky a cookies aktuálnej požiadavky |

Najnebezpečnejšie sú posledné dva riadky. Moderné aplikácie rady načítavajú prístupové údaje z premenných prostredia, napríklad zo súboru `.env` alebo z konfigurácie kontajnera. Tieto hodnoty potom stoja vo výstupe v čistom texte. Ako takéto tajomstvá zásadne chrániť, opisuje článok [Správna ochrana prístupových údajov a súborov .env](https://phpsos.de/sk/blog/env-dateien-schuetzen/).

K tomu pristupuje: výstup ukazuje hodnoty prebiehajúcej požiadavky, teda aj cookies a hlavičky. Ak môže útočník nasmerovať návštevníka na stránku a prečítať odpoveď, napríklad cez zraniteľnosť Cross-Site Scripting na inom mieste, stanú sa viditeľné aj cookies označené ako HttpOnly.

## Prečo phpinfo nie je dôkazom proti PHP2Shell

Mnohí súbor vytvorili práve preto, aby skontrolovali stav záplat. Na to sa však hodí len obmedzene. Distribúcie a hostingy často nasadzujú opravy ako backport; podľa správ ukazuje napríklad Ubuntu 24.04 po aktualizácii naďalej 8.3.6. Zobrazené číslo teda hovorí málo. Naopak, aktuálne číslo nedokazuje, že sa všetky workery reštartovali.

Spoľahlivý je stav balíka s číslami CVE v changelogu, doplnený reštartom všetkých procesov PHP. Ako na to, vysvetľuje článok [Správna kontrola verzie PHP a stavu záplat](https://phpsos.de/sk/php2shell/php-version-pruefen/).

Krátkodobý výstup vo webovom kontexte má napriek tomu svoje miesto: ukazuje, ktoré php.ini a ktoré hodnoty pre web skutočne platia, pretože príkazový riadok často číta inú konfiguráciu. Súvislosti o úrovniach a prednosti vysvetľuje [php.ini jednoducho](https://phpsos.de/sk/php/php-ini-erklaert/). Ak to potrebujete, tak s ochranou prístupu, s náhodným názvom súboru a len na minúty.

Pre väčšinu otázok existujú aj tak lepšie cesty. Verzia PHP poolu FPM je uvedená v jeho konfigurácii a v zozname procesov. Jednotlivé hodnoty sa dajú zistiť skriptom mimo webového koreňa cez `ini_get()`, bez toho, aby sa odhalilo všetko. A v hostingových paneloch ukazuje rozhranie pridelenú verziu pre každý web, hoci bez informácie o backportoch.

## Nájdenie zabudnutých súborov: konkrétne kroky kontroly

Takto vystopujete staré záťaže na serveri s Linuxom. Príkazy len čítajú a nič nemenia.

1. **Vyhľadať súbory s volaním phpinfo** (upraviť cestu):

```bash
grep -rlE "phpinfo[[:space:]]*\(" /var/www --include="*.php" 2>/dev/null
```

2. **Skontrolovať typické názvy súborov**, aj bez nálezu v obsahu:

```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. **Nálezy vyhodnotiť:** nie každé nájdené miesto je testovací súbor. Administrátorské nástroje, panely alebo frameworky môžu používať `phpinfo()` za prihlásením. Rozhodujúce je, či je súbor dostupný z internetu bez prihlásenia.

4. **Pozrieť prístupy v logu**, skôr než zmažete:

```bash
grep -E "GET /(info|phpinfo|test|i)\.php" /var/log/nginx/access.log* 2>/dev/null | tail -n 50
```

5. **Zmazať a vymeniť tajomstvá:** ak vo výstupe stálo heslo alebo kľúč a súbor bol verejný, hodnota sa považuje za známu. Zmeňte ju.

> **Tip:**
> Nájdené miesto s neznámym dátumom vytvorenia a nápadným obsahom popri volaní phpinfo môže byť aj zadné vrátko. Vtedy ho nielen zmazať, ale zabezpečiť a nechať skontrolovať, pozri [Rozpoznanie a odstránenie webshellov](https://phpsos.de/sk/ratgeber/webshell-erkennen/).

## Predchádzať trvalo namiesto upratovania

Tri opatrenia zabezpečia, že sa téma nevráti. Po prvé: `phpinfo` zaradiť do zoznamu `disable_functions` v php.ini pre webový kontext. Vopred skontrolujte, či váš panel funkciu nepotrebuje pre stránku stavu. Ako nastavenie pôsobí a kde sú jeho hranice, je v článku [Správne použitie disable_functions](https://phpsos.de/sk/ratgeber/disable-functions/).

```ini
; php.ini pre FPM alebo Apache, potom reštartovať všetky procesy PHP
disable_functions = phpinfo
expose_php = Off
```

Po druhé: poskytovanie len pevným postupom, napríklad cez Git alebo build pipeline, aby sa do webového koreňa nedostávali jednotlivé súbory ručne. Po tretie: informácie o stave patria do monitoringu alebo inventára, nie na verejnú stránku.

`expose_php = Off` navyše odstráni hlavičku, ktorou PHP v každej odpovedi oznamuje svoju verziu. Nenahrádza to aktualizáciu, ale automatizovaným skenerom to berie pohodlnú informáciu. Kto má viacero ľudí s prístupom na server, mal by sa navyše dohodnúť na jednoduchom pravidle: testovacie súbory sa mažú v tom istom pracovnom kroku, v ktorom vznikli, a nie až „neskôr“.

## Ako konkrétne pomáha PHP SOS?

- Prehľadáme vaše webové korene na súbory phpinfo, testovacie skripty a iné staré záťaže a každý nález vyhodnotíme.
- Vyhodnotíme prístupy k nájdeným súborom a povieme vám, ktoré tajomstvá by ste mali vymeniť.
- Stav záplat proti PHP2Shell dokladáme cez changelog balíka a štart procesov namiesto zobrazenia verzie.
- `disable_functions`, `expose_php` a ďalšie spevnenia zavádzame trvalo v rámci [spevnenia servera (hardening)](https://phpsos.de/sk/leistungen/server-haertung/).

**Záver:** Súbor phpinfo sa vytvorí za sekundy a rovnako rýchlo sa naň zabudne. Kto ho teraz vyhľadá a odstráni, uzavrie zbytočný únik údajov a pri stave záplat sa spolieha na spoľahlivé doklady.


## Časté otázky

**Je súbor phpinfo sám osebe bezpečnostná zraniteľnosť?**  
Neotvára prístup, ale poskytuje útočníkom podrobný opis servera: verziu, moduly, cesty, nastavenia a podľa prostredia aj premenné prostredia. To uľahčuje cielené útoky a môže odhaliť prístupové údaje.

**Dokazuje číslo verzie v phpinfo, že PHP2Shell je zaplátané?**  
Nie. Distribúcie a hostingy často nasadzujú opravy ako backport a zobrazené číslo zostáva rovnaké. Stav záplat dokladá changelog balíka a potvrdenie poskytovateľa, k tomu reštart všetkých procesov PHP.

**Čo robiť, ak bol súbor phpinfo dlhší čas verejný?**  
Súbor zmazať, v access logu pozrieť, kto ho sťahoval, a vymeniť všetky tajomstvá, ktoré boli vo výstupe, napríklad databázové heslá alebo kľúče API z premenných prostredia.

**Môžem phpinfo() úplne vypnúť?**  
Áno, cez disable_functions v php.ini webového kontextu. Predtým skontrolujte, či panel alebo aplikácia túto funkciu nepoužíva pre stránky stavu, a procesy PHP potom reštartujte.

## Zdroje

- [Príručka PHP: phpinfo()](https://www.php.net/manual/de/function.phpinfo.php)
- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
- [php.net: bezpečnostné hlásenia](https://www.php.net/)
