# Bezpečnosť PHP v Drupale po PHP2Shell: ako zabezpečiť svoj web

> Zabezpečte Drupal po PHP2Shell: skontrolujte PHP v správe o stave, chráňte settings.php a priečinok files, overte roly a moduly. Takto na to.

Zdroj: https://phpsos.de/sk/plattformen/drupal/  
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:** Pri bezpečnosti PHP v Drupale ide po PHP2Shell predovšetkým o server: zraniteľnosť je v PHP, nie v Drupale. Skontrolujte stav PHP v správe o stave a u prevádzkovateľa, reštartujte všetky procesy PHP a potom skontrolujte `settings.php`, adresár `files` a práva rolí.

## Drupal a PHP2Shell: situácia

Drupal sa často používa pre väčšie weby, portály a verejné orgány, často s mnohými redaktormi a rozhraniami. Zraniteľnosti PHP CVE-2026-109618 a CVE-2026-109619 podľa tímu PHP umožňujú spustenie škodlivého kódu na diaľku bez prihlásenia. Ako dobre je udržiavaný samotný Drupal, na tom nezáleží.

Drupal má vlastný bezpečnostný tím, ktorý zverejňuje upozornenia k jadru a modulom. PHP2Shell medzi ne nepatrí, pretože nejde o zraniteľnosť Drupalu. Kto sleduje iba upozornenia Drupalu, mohol preto správu prehliadnuť.

Pri väčších projektoch na Drupale sa zodpovednosť často rozdeľuje medzi viaceré miesta: agentúra udržiava kód, dátové centrum prevádzkuje servery, redakcia sedí vo vlastnej budove. Písomne si vyjasnite, kto nasadí aktualizáciu PHP, kto spustí reštart a kto skontroluje, či sa predtým niečo nestalo. Pri nastaveniach s viacerými webovými servermi za load balancerom musí byť každý jednotlivý server záplatovaný a reštartovaný, inak časť požiadaviek zostane na starom PHP.

## Bezpečnosť PHP v Drupale: skontrolovať verziu a stav záplat

Pod **Správy > Správa o stave** zobrazuje Drupal verziu PHP, s ktorou web beží, spolu s upozorneniami ku konfigurácii. V príkazovom riadku dáva `drush status` verziu CLI PHP, s ktorým bežia aj cron úlohy a nasadenia. Obe musia byť záplatované.

Opravené upstream verzie sú 8.5.12, 8.4.27, 8.3.36 a 8.2.35. Distribúcie a poskytovatelia hostingu opravy čiastočne nasadzujú ako backport, číslo potom zostane rovnaké; rozhodujúci je potvrdený stav balíkov. Ktoré verzie PHP vaša verzia Drupalu podporuje, skontrolujte podľa systémových požiadaviek na drupal.org. K aktualizácii patrí reštart, popísaný na stránke [Reštartovať PHP-FPM a všetkých workerov](https://phpsos.de/sk/php2shell/php-fpm-neustart/).

## Adresáre a súbory, na ktorých záleží

| Miesto | Obsah | Bod kontroly |
|---|---|---|
| `sites/default/settings.php` | Databáza, hash salt, `trusted_host_patterns` | Dátum zmeny, vložené includes |
| `sites/default/files/` | Verejné nahrávky, vygenerované obrázky, CSS a JS | Žiadne súbory PHP, `.htaccess` prítomný |
| Adresár súkromných súborov | Chránené nahrávky, často mimo koreňa dokumentov | Prístupové práva |
| `modules/contrib/`, `modules/custom/` | Moduly z drupal.org a vlastné vývoje | Zmenené alebo neznáme moduly |
| `themes/` | Témy so šablónami Twig | Cudzí JavaScript |
| `vendor/` | Závislosti Composeru | `composer audit` |

Drupal vytvára v adresári `files` súbor `.htaccess`, ktorý zabraňuje spúšťaniu PHP. Pod Apache funguje, pod Nginx nie. Tam je potrebné vlastné pravidlo:

```nginx
location ~* ^/sites/.+/files/.+\.php$ {
    deny all;
}
```

Neškodné kontroly pomocou štandardných nástrojov a Drushu:

```bash
find sites/*/files -type f -name "*.php"
drush pm:list --status=enabled --type=module
composer audit
```

> **Tip:**
> Porovnajte stav kódu na serveri so svojím repozitárom Git. Pri projektoch na Drupale s Composerom je to najrýchlejší spôsob, ako nájsť cudzie alebo zmenené súbory, pretože každá odchýlka musí byť vysvetliteľná.

## Roly, práva a moduly ako riziko

Prihlásenie je pod `/user/login`, administračná oblasť pod `/admin`. V Drupale o bezpečnosti nerozhodujú len účty administrátorov, ale aj jednotlivé oprávnenia. Práva, ako je správa modulov, používateľov, oprávnení alebo textových formátov s plným HTML, sú prakticky práva administrátora. Pod Ľudia a Oprávnenia skontrolujte, ktoré roly ich majú a kto do týchto rolí patrí.

Moduly contrib Drupal výrazne rozširujú, prinášajú však vlastný kód. Moduly bez aktívnej údržby a staré vlastné vývoje sú často dôvodom, prečo sa aktualizácia PHP odkladá. Viac k závislostiam nájdete na stránke [Skontrolovať závislosti Composeru na zraniteľnosti](https://phpsos.de/sk/ratgeber/composer-abhaengigkeiten-pruefen/).

## Čo aktualizácia Drupalu dokáže a čo nie

Aktualizácia jadra alebo modulu uzatvára chyby v tomto kóde a môže umožniť novšie verzie PHP. PHP nezáplatuje, neodstráni cudzie súbory zo `sites/default/files`, nevráti späť oprávnenia a nezmaže skryto založené účty. Aj cache môže ďalej doručovať zmanipulovaný obsah, kým sa nevyprázdni. Pri podozrení treba obnoviť hash salt a prístup k databáze.

Pri inštaláciách multisite zdieľa viac webov ten istý kód, no pod `sites/` má každý vlastný `settings.php` a vlastný adresár `files`. Skontrolujte potom každý web zvlášť. Nález na jednom webe sa vďaka spoločnému kódu väčšinou týka aj všetkých ostatných.

## Ako konkrétne pomáha PHP SOS?

- Kontrolujeme webové a CLI PHP vášho servera s Drupalom a necháme si potvrdiť záplatu a reštart.
- Zálohujeme logy a údaje a porovnávame stav kódu s vaším repozitárom alebo pôvodnými balíkmi.
- Kontrolujeme `settings.php`, adresár `files`, pravidlá servera, roly a oprávnenia.
- Na požiadanie prevezmeme priebežnú starostlivosť v [bezpečnostnej zmluve o údržbe](https://phpsos.de/sk/leistungen/security-wartungsvertrag/), aby sa aktualizácie PHP a Drupalu opäť nerozišli.


## Časté otázky

**Pomôže bezpečnostná aktualizácia Drupalu proti PHP2Shell?**  
Nie. Aktualizácie Drupalu uzatvárajú chyby v jadre Drupalu a v moduloch. PHP2Shell je v PHP servera a vyžaduje aktualizáciu PHP alebo potvrdený backport a reštart všetkých procesov PHP.

**Kde Drupal zobrazuje verziu PHP?**  
V správe o stave pod Správy. S Drushom zobrazí drush status verziu PHP z príkazového riadku. Oba údaje sa môžu líšiť a backport sa z ani jedného z nich nedá spoľahlivo rozpoznať.

**Chráni .htaccess v priečinku files aj pod Nginx?**  
Nie. Súbor .htaccess vytvorený Drupalom vyhodnocuje iba Apache. Pod Nginx potrebujete vlastné pravidlo v konfigurácii servera, ktoré zablokuje súbory PHP v adresári files.

**Čo znamená trusted_host_patterns?**  
Nastavenie v settings.php určuje, pod akými názvami hostiteľa Drupal odpovedá. Chráni pred útokmi cez zmanipulované údaje o hostiteľovi a patrí do každej produkčnej inštalácie.

## Zdroje

- [php.net: bezpečnostné hlásenia](https://www.php.net/)
- [Drupal](https://www.drupal.org/)
- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
- [PHP 8 ChangeLog](https://www.php.net/ChangeLog-8.php)
