Aktuální situace: PHP2Shell. Dvě kritické zranitelnosti PHP (CVSS 9.2) umožňují spustit škodlivý kód bez přihlášení. Záplaty od 21. 10. 2026.Co nyní udělat →

Soubory phpinfo(): proč musí zmizet

Po PHP2Shell zakládá mnoho administrátorů rychle soubor info.php. Proč jsou takové soubory únikem dat, jak je najít a jaké způsoby kontroly jsou lepší.

Stav 5 min čteníBezpečný vývoj

Stručně: Soubor, který jen volá phpinfo(), ukáže každému návštěvníkovi verzi, moduly, cesty a nastavení PHP, často i proměnné prostředí s přístupovými údaji. Pro bezpečnost phpinfo proto platí: takové soubory nikdy nenechávejte trvale ve webrootu, po použití je smažte a stav PHP raději kontrolujte přes správu balíčků a konfiguraci. Stav záplat proti PHP2Shell výstup phpinfo stejně nedokazuje.

Testovací soubor, který zůstane

Od 21. 10. 2026 kontrolují tisíce administrátorů, jakou verzi PHP jejich weby doručují. Nejrychlejší cesta je známá: založit soubor info.php s jediným řádkem, otevřít ho v prohlížeči, výsledek přečíst. Funguje to. Problém začíná potom, když se na soubor zapomene.

Takové soubory přežívají překvapivě dlouho. Putují s přesuny, končí v zálohách a po letech se objevují v adresářích, které už nikdo nezná. Automatizované skenery se na typické názvy souborů dotazují neustále. Co bylo pro administrátora pomůckou, je pro útočníka stavební plán serveru.

Obzvlášť zasaženy jsou agentury a hostingové firmy s mnoha weby zákazníků. Kdo v hektickém týdnu kontroluje desítky webů, rychle založí desítky testovacích souborů. Stačí jediná zapomenutá složka a soubor je dostupný ještě po měsících.

Co phpinfo() prozradí a proč na tom pro bezpečnost záleží

Podle příručky PHP vypisuje phpinfo() aktuální stav PHP. Pomocí konstant lze řídit, které části se zobrazí; bez udání je to vše.

Oblast (konstanta) Obsah podle příručky Proč je citlivá
INFO_GENERAL build, umístění php.ini, webserver, systém prozrazuje operační systém a cesty
INFO_CONFIGURATION lokální a hlavní hodnoty všech direktiv ukazuje, zda disable_functions nebo open_basedir fungují
INFO_MODULES načtená rozšíření s nastavením útočníci vidí, jaké funkce jsou k dispozici
INFO_ENVIRONMENT proměnné prostředí zde často stojí přístupové údaje k databázi nebo API
INFO_VARIABLES předdefinované proměnné (Environment, GET, POST, Cookie, Server) obsahuje hlavičky a cookies aktuálního požadavku

Nejnebezpečnější jsou poslední dva řádky. Moderní aplikace rády načítají přístupové údaje z proměnných prostředí, například ze souboru .env nebo z konfigurace kontejneru. Tyto hodnoty pak stojí ve výstupu v čitelné podobě. Jak taková tajemství zásadně chránit, popisuje článek Správná ochrana přístupových údajů a souborů .env.

K tomu přistupuje: výstup ukazuje hodnoty probíhajícího požadavku, tedy i cookies a hlavičky. Pokud může útočník návštěvníka nasměrovat na stránku a přečíst odpověď, například přes zranitelnost Cross-Site Scripting na jiném místě, stanou se viditelnými i cookies označené jako HttpOnly.

Proč phpinfo není důkazem proti PHP2Shell

Mnozí soubor založili právě proto, aby zkontrolovali stav záplat. K tomu se ale hodí jen omezeně. Distribuce a hostingové firmy nasazují opravy často jako backport; podle zpráv například Ubuntu 24.04 zobrazuje po aktualizaci dál 8.3.6. Zobrazené číslo tedy říká málo. A naopak: aktuální číslo nedokazuje, že byli restartováni všichni workeři.

Spolehlivý je stav balíčku s čísly CVE v changelogu, doplněný restartem všech procesů PHP. Jak na to, vysvětluje článek Správná kontrola verze PHP a stavu záplat.

Krátkodobý výstup ve webovém kontextu má přesto své místo: ukáže, jaké php.ini a jaké hodnoty pro web skutečně platí, protože příkazová řádka často čte jinou konfiguraci. Souvislosti o úrovních a přednosti vysvětluje stránka php.ini vysvětleno. Pokud to potřebujete, pak chráněné přístupem, s náhodným názvem souboru a jen na minuty.

Pro většinu otázek existují stejně lepší cesty. Verze PHP poolu FPM stojí v jeho konfiguraci a v seznamu procesů. Jednotlivé hodnoty lze zjistit skriptem mimo webroot pomocí ini_get(), aniž by se vše odhalovalo. A v panelech hostingu zobrazuje rozhraní přidělenou verzi pro každý web, byť bez výpovědi o backportech.

Najít zapomenuté soubory: konkrétní kroky kontroly

Takto vystopujete zátěž z minulosti na linuxovém serveru. Příkazy jen čtou a nic nemění.

  1. Vyhledat soubory s voláním phpinfo (upravte cestu):
grep -rlE "phpinfo[[:space:]]*\(" /var/www --include="*.php" 2>/dev/null
  1. Zkontrolovat typické názvy souborů, i bez nálezu v obsahu:
find /var/www -type f \( -iname "info.php" -o -iname "phpinfo.php" -o -iname "test.php" -o -iname "i.php" \) 2>/dev/null
  1. Nálezy vyhodnotit: Ne každý nález je testovací soubor. Administrační nástroje, panely nebo frameworky mohou phpinfo() používat za přihlášením. Rozhodující je, zda je soubor dostupný z internetu bez přihlášení.

  2. Před smazáním zkontrolovat přístupy v logu:

grep -E "GET /(info|phpinfo|test|i)\.php" /var/log/nginx/access.log* 2>/dev/null | tail -n 50
  1. Smazat a vyměnit tajemství: Pokud ve výstupu stálo heslo nebo klíč a soubor byl veřejný, hodnota se považuje za známou. Změňte ji.
Tip

Nález s neznámým datem vytvoření a nápadným obsahem vedle volání phpinfo může být i zadní vrátka. Pak soubor nejen smažte, ale zajistěte a nechte zkontrolovat, viz Rozpoznání a odstranění webshellů.

Trvale předcházet místo uklízení

Tři opatření zajistí, že se téma nevrátí. Za prvé: phpinfo přidat do seznamu disable_functions v php.ini pro webový kontext. Předem zkontrolujte, zda váš panel funkci nepotřebuje pro stavovou stránku. Jak nastavení funguje a kde jsou jeho meze, stojí v článku Správné použití disable_functions.

; php.ini pro FPM nebo Apache, poté restartovat všechny procesy PHP
disable_functions = phpinfo
expose_php = Off

Za druhé: nasazování jen pevným postupem, například přes Git nebo pipeline pro sestavení, aby se do webrootu nedostávaly jednotlivé soubory ručně. Za třetí: stavové informace patří do monitoringu nebo inventáře, ne na veřejnou stránku.

expose_php = Off navíc odstraní hlavičku, kterou PHP v každé odpovědi sděluje svou verzi. Nenahrazuje to aktualizaci, ale automatizovaným skenerům to bere pohodlnou informaci. Kdo má více osob s přístupem k serveru, měl by navíc dohodnout jednoduché pravidlo: testovací soubory se mažou ve stejném pracovním kroku, v němž byly založeny, ne až „později“.

Jak konkrétně pomáhá PHP SOS?

  • Prohledáme vaše webrooty na soubory phpinfo, testovací skripty a další zátěž z minulosti a každý nález posoudíme.
  • Vyhodnotíme přístupy k nalezeným souborům a řekneme vám, která tajemství byste měli vyměnit.
  • Stav záplat proti PHP2Shell dokládáme changelogem balíčku a restartem procesů, ne zobrazením verze.
  • Nastavení disable_functions, expose_php a další zpevnění trvale zavedeme v rámci hardeningu serveru.

Závěr: Soubor phpinfo se založí za pár sekund a stejně rychle se zapomene. Kdo ho nyní vyhledá a odstraní, uzavře zbytečný únik dat a u stavu záplat se spoléhá na spolehlivé doklady.

Časté dotazy

Je soubor phpinfo sám o sobě bezpečnostní zranitelností?

Neotevírá přístup, ale poskytuje útočníkům podrobný popis serveru: verzi, moduly, cesty, nastavení a podle prostředí i proměnné prostředí. To usnadňuje cílené útoky a může odhalit přístupové údaje.

Dokazuje číslo verze v phpinfo, že PHP2Shell je záplatováno?

Ne. Distribuce a hostingové firmy nasazují opravy často jako backport a zobrazené číslo zůstává stejné. Stav záplat dokládá changelog balíčku a potvrzení poskytovatele, k tomu restart všech procesů PHP.

Co dělat, když byl soubor phpinfo delší dobu veřejný?

Soubor smazat, v přístupovém logu zjistit, kdo ho stáhl, a vyměnit všechna tajemství, která byla ve výstupu, například hesla k databázi nebo klíče API z proměnných prostředí.

Mohu phpinfo() úplně vypnout?

Ano, přes disable_functions v php.ini webového kontextu. Předem zkontrolujte, zda panel nebo aplikace funkci nepoužívá pro stavové stránky, a procesy PHP poté restartujte.

Zdroje

Okamžitý kontakt

Každá hodina se počítá. Napište nám hned.

Stručně popište systém, verzi PHP a pozorování. Ozveme se, vyjasníme situaci a budeme pracovat na dálku, dokud nebude incident uzavřen a zdokumentován.

Okamžitá pomoc