# Okamžitá opatření, když zatím nelze záplatovat

> Náhradní řešení zranitelnosti PHP2Shell: přechodná opatření z php.net, správně nastavená, s jejich hranicemi a pokyny na cestu k záplatě.

Zdroj: https://phpsos.de/cs/php2shell/sofortmassnahmen-ohne-patch/  
Stav: 25.10.2026  
Poskytovatel: PHP SOS, Nouzová pomoc pro PHP a bezpečnost serverů. Okamžitá pomoc přes WhatsApp: https://wa.me/491736494914?text=Dobr%C3%BD%20den%2C%20PHP%20SOS%2C%20pot%C5%99ebujeme%20pomoc%20s%20na%C5%A1%C3%ADm%20PHP%20serverem.%20Firma%3A%20%E2%80%A6%20Web%3A%20%E2%80%A6

**Stručně:** Náhradní řešení zranitelnosti PHP2Shell může riziko snížit, ale aktualizaci nenahrazuje. php.net k tomu uvádí pevné limity paměti a nahrávání, vypnutí session upload progress a u PHP 8.5 `fatal_error_backtraces=0`. Pokud ani to není krátkodobě možné, BSI (německý Spolkový úřad pro informační bezpečnost) doporučuje webový server dočasně odpojit od sítě.

## Co náhradní řešení zvládne a co ne

Přechodná opatření z php.net mají ztížit podmínky, za nichž lze zranitelnosti CVE-2026-109618 a CVE-2026-109619 zneužít. Výslovně **nejsou úplnou ochranou**. Opraveny jsou zranitelnosti jen v PHP 8.5.12, 8.4.27, 8.3.36 a 8.2.35 nebo v potvrzeném backportu vašeho poskytovatele.

Opatření mají smysl, pokud aktualizace z konkrétního důvodu zatím nejde: servisní okno teprve přijde, aplikace se musí nejdřív otestovat, nebo provozujete PHP 8.1 či starší, pro které už oficiální aktualizace neexistují. Pak jsou mostem, ne cílem.

Plánujte proto spolu s náhradním řešením i aktualizaci: kdo ji provede, v jakém servisním okně a kdo poté ověří, že jsou všichni workeři restartováni? Přechod bez koncového data hrozí stát se trvalým stavem.

## Možnost 1: server dočasně odpojit od sítě

BSI vyhlásil výstražný stupeň 3 (oranžový) a doporučuje postižené webové servery dočasně odpojit od sítě, pokud aktualizace není okamžitě možná. Někteří poskytovatelé to udělali preventivně; neznamená to, že tyto weby byly napadeny.

Pro mnoho firem je výpadek e-shopu nebo portálu drahý. Smysl může mít zvážení: přístup jen přes VPN nebo povolené IP adresy, statická stránka s údržbou místo aplikace PHP nebo vypnutí jednotlivých nepotřebných webů na serveru. Čím méně PHP je dostupné zvenčí, tím menší je plocha pro útok.

Důležité je rozhodnutí udělat vědomě a zaznamenat: kdo kdy rozhodl nechat server online a s jakými ochrannými opatřeními? To později pomůže vůči pojišťovně, ochraně osobních údajů a vedení.

## Přechodná opatření z php.net

| Opatření | Hodnota | Poznámka |
|---|---|---|
| `memory_limit` | `-1`, bez možnosti přepsání | limit paměti pak nastavit přes kontejner nebo cgroup |
| `post_max_size` | `8M` bez nahrávání, `32M` s nahráváním | `upload_max_filesize` nižší |
| Limit paměti | přes kontejner/cgroup | ne přes `RLIMIT_AS` nebo `RLIMIT_DATA` |
| `session.upload_progress.enabled` | `0` | v php.ini, poolu nebo konfiguraci serveru, ne přes `ini_set()` nebo `.user.ini` |
| `fatal_error_backtraces` | `0` | jen PHP 8.5 |

Nastavení `session.upload_progress.enabled=0` je zároveň náprava pro zranitelnost [CVE-2026-115560](https://phpsos.de/cs/php2shell/cve-2026-115560/), nahlášenou 23. října.

## Správné nastavení náhradního řešení zranitelnosti PHP

Rozhodující je místo. Hodnoty musí být nastaveny tak, aby je aplikace nemohla přepsat. Cesty a názvy služeb se liší podle distribuce; příklady vycházejí z PHP 8.3.

**PHP-FPM, v poolu** (např. `/etc/php/8.3/fpm/pool.d/www.conf`):

```ini
php_admin_value[memory_limit] = -1
php_admin_value[post_max_size] = 8M
php_admin_value[upload_max_filesize] = 6M
php_admin_flag[session.upload_progress.enabled] = off
; jen PHP 8.5:
; php_admin_flag[fatal_error_backtraces] = off
```

**Apache s mod_php,** v konfiguraci serveru nebo ve VirtualHostu:

```apache
php_admin_value memory_limit -1
php_admin_value post_max_size 32M
php_admin_value upload_max_filesize 24M
php_admin_flag session.upload_progress.enabled off
```

**Limit paměti přes cgroup,** zde pomocí systemd pro službu FPM. Hodnotu přizpůsobte svému serveru:

```ini
# sudo systemctl edit php8.3-fpm
[Service]
MemoryMax=2G
```

Poté restartujte všechny workery, jinak nezabere nic z toho: `systemctl restart php8.3-fpm` nebo u mod_php Apache. Jak ověřit, že neběží žádný starý proces, najdete na stránce [Restart PHP-FPM a všech workerů](https://phpsos.de/cs/php2shell/php-fpm-neustart/). Obecný hardening konfigurace popisuje stránka [Bezpečná konfigurace php.ini](https://phpsos.de/cs/ratgeber/php-ini-sicher-konfigurieren/).

> **Důležité:**
> Po přepnutí otestujte nahrávání souborů a velké formuláře. Příliš těsné `post_max_size` může blokovat objednávky, přihlášky nebo nahrávání médií. To je důvod, proč aktualizaci neodkládat dlouho.

## Dodatečné ochranné vrstvy

Web Application Firewall nebo virtuální záplatování mohou pomoci jako další vrstva. Cloudflare nasadil ochranná pravidla, sám ale upozorňuje, že pravidla jen podle dat požadavku nestačí. WAF je proto doplněk, ne náhrada. Více na stránce [WAF a virtuální záplatování](https://phpsos.de/cs/leistungen/waf-virtuelles-patching/).

Zajistěte také logy serveru od 20. října. Podle zpráv médií byl první pokus o útok pozorován již 17. října; logy jsou základ, pokud budete později muset objasnit, zda se před záplatou něco stalo.

## Jak konkrétně pomáhá PHP SOS?

- **Ujasnit situaci:** Zkontrolujeme, zda je aktualizace krátkodobě možná, nebo zda je nutný přechod, a probereme s vámi možnost odpojit části od sítě.
- **Nastavit opatření:** Hodnoty z php.net zapíšeme na správné místo, nastavíme limit cgroup a restartujeme všechny workery.
- **Otestovat funkci:** Formuláře, nahrávání souborů a objednávkové procesy po přepnutí zkontrolujeme.
- **Dovést k záplatě:** Prostřednictvím [služby záplatování PHP](https://phpsos.de/cs/leistungen/php-patch-service/) aktualizaci naplánujeme a přechodné hodnoty poté kontrolovaně vrátíme tam, kde překážejí.


## Časté dotazy

**Chrání náhradní řešení plně před PHP2Shell?**  
Ne. php.net tato opatření výslovně označuje za přechodná, ne za úplnou ochranu. Snižují riziko, dokud není nasazena aktualizace. BSI doporučuje servery bez záplaty dočasně odpojit od sítě.

**Mohu nastavení zadat přes .htaccess nebo .user.ini?**  
U session.upload_progress.enabled php.net výslovně vylučuje ini_set() a .user.ini. I u memory_limit platí: hodnota musí být nastavena tak, aby ji aplikace nemohla přepsat. To se daří v php.ini, v poolu FPM pomocí php_admin_value nebo v konfiguraci serveru Apache.

**Stačí jako náhradní řešení Web Application Firewall?**  
Jako dodatečná vrstva může pomoci. Cloudflare nasadil ochranná pravidla, sám ale upozorňuje, že pravidla jen podle dat požadavku nestačí. WAF nenahrazuje ani aktualizaci, ani přechodná opatření na serveru.

**Co dělat, když mám jen sdílený hosting?**  
Pak jsou php.ini a restart v rukou poskytovatele hostingu. Zeptejte se konkrétně, zda byla aktualizace nasazena nebo přechodná opatření nastavena a zda byly restartovány všechny procesy PHP.

## Zdroje

- [php.net: bezpečnostní oznámení](https://www.php.net/)
- [BSI: německý Spolkový úřad pro informační bezpečnost](https://www.bsi.bund.de/)
- [OWASP Cheat Sheets](https://cheatsheetseries.owasp.org/)
