# Súbory PHP v priečinku na nahrávanie: správny výklad nálezov

> Súbor PHP v priečinku uploads? Ako nález vyhodnotiť, skontrolovať prístupy v logu, rozlíšiť neškodné zástupné súbory od webshellov a správne konať.

Zdroj: https://phpsos.de/sk/blog/php-dateien-im-upload-ordner/  
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 PHP v priečinku na nahrávanie je vážny výstražný signál, pretože tam majú ležať len obrázky a dokumenty. Súbor nikdy neotvárajte v prehliadači, ale čítajte ho ako text, skontrolujte časové pečiatky a vlastníka a vyhľadajte názov súboru v prístupových logoch. Neškodné sú zvyčajne len prázdne zástupné súbory, ako `index.php` bez obsahu; všetko ostatné považujte za možné vlámanie.

## Prečo PHP v priečinku na nahrávanie nemá čo hľadať

Priečinky na nahrávanie slúžia obsahu, ktorý nahrávajú návštevníci alebo redaktori: obrázky, PDF, videá. Používateľ webového servera tam smie zapisovať, inak by nahrávanie nefungovalo. Presne to robí tieto priečinky lákavými pre útočníkov. Kto môže cez zraniteľnosť zapisovať súbory, ukladá ich tam, kde je zápis povolený.

Nové súbory PHP v priečinkoch na nahrávanie alebo cache patria podľa správ, ktoré máme k dispozícii, medzi všeobecné varovné signály po vlámaní. Pre PHP2Shell neexistujú potvrdené indikátory kompromitácie (Indicators of Compromise); nález teda nehovorí nič o tom, cez ktorú zraniteľnosť sa súbor dostal. Ako sa funkcie nahrávania stavajú bezpečne, opisuje [Bezpečná implementácia nahrávania súborov v PHP](https://phpsos.de/sk/ratgeber/datei-upload-sicher/).

Či môže takýto súbor spôsobiť škodu, rozhoduje konfigurácia webového servera. Ak vykonáva súbory PHP v priečinku na nahrávanie, stane sa každý tam uložený súbor možným diaľkovým ovládaním. Ak je tam vykonávanie zablokované, súbor ostáva cudzím telesom, ale spočiatku bez účinku. Mnohé inštalácie toto zablokovanie nikdy nenastavili.

## Ako sa súbor PHP dostane do priečinka na nahrávanie?

Pre hodnotenie pomáha poznať možné cesty. Každá vedie k iným nadväzujúcim otázkam.

| Cesta | Typické pozadie | Nadväzujúca otázka |
|---|---|---|
| Nezabezpečený formulár na nahrávanie | kontrola len prípony alebo typu, ktorý hlási prehliadač | Ktoré formuláre prijímajú súbory? |
| Zraniteľnosť v plugine alebo téme | známa slabina v zastaranom rozšírení | Ktoré rozšírenia sú zastarané? |
| Odcudzené prístupové údaje | účet admina, FTP alebo hostingu | Aké prihlásenia sa vyskytli naposledy? |
| Vykonanie kódu cez zraniteľnosť | napríklad v interpreteri, ako je možné pri PHP2Shell | Bolo PHP v tom období zraniteľné? |
| Legitímny plugin | zástupné súbory, zriedka súbory cache | Patrí súbor do pôvodného balíka? |

Môže sa spojiť viacero ciest. Útočník, ktorý vykonáva kód cez zraniteľnosť, možno súbor len uloží, aby sa neskôr pohodlnejšie vrátil.

## Systematicky vypísať miesta nálezu

Skôr než posúdite jednotlivý súbor, získajte prehľad. Príkazy len čítajú. Cesty sú príklady pre WordPress; pri iných systémoch prispôsobte cestu k nahrávaniu.

```bash
# Súbory podobné PHP v priečinku na nahrávanie s veľkosťou, vlastníkom, mtime a ctime
find /var/www/html/wp-content/uploads -type f \
  \( -iname "*.php*" -o -iname "*.phtml" -o -iname "*.phar" -o -iname ".htaccess" -o -iname ".user.ini" \) \
  -printf '%s Bytes  %u  m:%T+  c:%C+  %p\n'

# Určiť typ súboru podľa obsahu namiesto prípony (nápadné sú obrázky s obsahom PHP)
find /var/www/html/wp-content/uploads -type f -newermt "2026-10-17" -exec file {} + | grep -viE "image|pdf|video|audio"
```

Iné systémy používajú iné zapisovateľné priečinky, napríklad `fileadmin` v TYPO3, `images` v Joomle alebo priečinok médií pod `public` v Shopware 6. K tomu pristupujú adresáre cache a dočasné adresáre aplikácie. Pri inštaláciách multisite a viacerých weboch na jednom serveri je zodpovedajúco veľa priečinkov na nahrávanie; každý patrí do hľadania.

Podozrivé sú aj súbory `.htaccess` a `.user.ini` v priečinku na nahrávanie. Pomocou nich sa dá vykonávanie PHP v tomto priečinku opäť zapnúť alebo zmeniť konfiguráciu.

## Súbor PHP v priečinku uploads: správny výklad nálezu

Nie každý zásah je rovnako vážny. Nasledujúce zaradenie pomáha pri prvom hodnotení. Nenahrádza dôkladné vyšetrenie.

| Zistenie | Prvé zaradenie |
|---|---|
| `index.php` s nulovým počtom bajtov alebo len komentárom | zvyčajne zástupný súbor proti výpisu adresára, porovnať s pluginom |
| Súbor PHP s obsahom v mesačnom priečinku | vysoké podozrenie |
| Dvojitá prípona ako `bild.jpg.php` alebo `.php.png` | vysoké podozrenie, typické maskovanie |
| Obrázok, ktorý podľa `file` obsahuje kód PHP | vysoké podozrenie, môže sa vykonať cez vloženie |
| `.htaccess` alebo `.user.ini` v priečinku na nahrávanie | podozrenie, skontrolovať konfiguráciu |
| Súbor patrí používateľovi webového servera, ctime po 17. 10. | zodpovedá vlámaniu cez web |

Podozrivé súbory čítajte len ako text, napríklad pomocou `head -c 2000 datei.php` alebo `less`. Nápadné sú veľmi dlhé riadky, kódované reťazce a názvy funkcií ako `eval` alebo `base64_decode`. Ako spoznáte zahmlený kód, ukazuje [Rozpoznanie zahmleného kódu PHP](https://phpsos.de/sk/blog/verschleierter-php-code/).

## Bol súbor zavolaný? Pohľad do logu

Najdôležitejšia otázka po náleze znie: použil niekto súbor? Odpoveď je v prístupových logoch webového servera. Hľadajte názov súboru, aj v archivovaných logoch.

```bash
# Volania podozrivého súboru v aktuálnych a zabalených logoch (názov ako príklad)
grep -h "uploads/2026/10/thumb.php" /var/log/nginx/access.log* 2>/dev/null
zgrep -h "uploads/2026/10/thumb.php" /var/log/nginx/access.log*.gz 2>/dev/null

# Len úspešné volania s adresou IP a časom
grep -h "uploads/2026/10/thumb.php" /var/log/nginx/access.log* | awk '$9 == 200 {print $1, $4, $6, $7}'
```

Mnoho úspešných požiadaviek POST z niekoľkých adries naznačuje aktívne použitie ako webshellu. Žiadne zásahy automaticky neznamenajú odvolanie poplachu, pretože logy môžu byť rotované, zmazané alebo neúplné. Ak web beží za CDN alebo proxy, ďalšie protokoly sú tam; pri zdieľanom hostingu poskytuje prístupové logy zvyčajne poskytovateľ hostingu v zákazníckej zóne. Všímajte si aj požiadavky na iné nové súbory z tých istých adries, pretože často vedú k ďalším súčastiam. Logy od 20. októbra uschovajte. Ako logy dôkladne vyhodnotiť, je v sprievodcovi [Vyhodnotenie logov webového servera po útoku](https://phpsos.de/sk/ratgeber/logfiles-auswerten/).

> **Konajte hneď:**
> Ak log ukazuje úspešné volania neznámeho súboru PHP, vychádzajte z vlámania. Zabezpečte súbor a logy, obmedzte prístup na server a skontrolujte, či môžu byť dotknuté osobné údaje.

## Po vyhodnotení: správne poradie

1. **Zabezpečiť:** Súbor skopírovať s kontrolným súčtom a časovými pečiatkami, zabezpečiť logy.
2. **Objasniť pôvod:** Skontrolovať formuláre na nahrávanie, pluginy a obdobie pred nálezom.
3. **Hľadať ďalšie súčasti:** ďalšie súbory, cronjoby, nové účty administrátorov.
4. **Zablokovať vykonávanie:** Zakázať PHP v priečinku na nahrávanie na úrovni webového servera, ako opisuje článok [Zákaz vykonávania PHP v priečinkoch na nahrávanie](https://phpsos.de/sk/blog/php-in-uploads-verbieten/).
5. **Vyčistiť a zmeniť prístupy:** až potom súbor odstrániť a obnoviť všetky heslá.

## Ako konkrétne pomáha PHP SOS?

- **Zhodnotiť nález:** Súbor preveríme bez jeho spustenia a zaradíme ho.
- **Objasniť použitie:** Vyhodnotíme logy a zrekonštruujeme, kto súbor kedy zavolal.
- **Vyčistiť úplne:** Prostredníctvom [odstránenia malvéru](https://phpsos.de/sk/leistungen/malware-entfernung/) nájdeme všetky súčasti, uzavrieme príčinu a zmeníme prístupy.
- **Zabrániť opakovaniu:** Zablokujeme vykonávanie PHP v zapisovateľných priečinkoch a sledujeme nové súbory.


## Časté otázky

**Je každý súbor PHP v priečinku na nahrávanie nebezpečný?**  
Nie každý. Niektoré pluginy ukladajú prázdny index.php, aby sa obsah priečinka nevypisoval. Všetko ostatné, najmä súbory s obsahom, neobvyklým názvom alebo dvojitou príponou, by ste mali považovať za podozrivý prípad.

**Smiem podozrivý súbor otvoriť v prehliadači?**  
Nie. Zavolanie cez web kód spustí. Súbor čítajte len ako text na serveri alebo v kópii, napríklad pomocou less alebo head.

**Ako zistím, či sa súbor použil?**  
Vyhľadajte názov súboru v prístupových logoch webového servera. Požiadavky so stavom 200 a metódou POST ukazujú, že súbor bol zavolaný. Príslušné adresy IP a časy pomáhajú pri ďalšom vyšetrovaní.

**Stačí súbor zmazať a zablokovať PHP v priečinku na nahrávanie?**  
Oboje je potrebné, no nie dostatočné. Navyše objasnite, ako sa tam súbor dostal, hľadajte ďalšie súčasti a zmeňte prístupové údaje. Inak sa útočník vráti tou istou cestou.

## Zdroje

- [OWASP Cheat Sheet Series (okrem iného File Upload)](https://cheatsheetseries.owasp.org/)
- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
- [php.net: bezpečnostné hlásenia](https://www.php.net/)
