# A session.upload_progress kikapcsolása: helyesen és tartósan

> A session.upload_progress.enabled=0 helyes beállítása: hol hat az érték, hogyan zárolja a visszakapcsolás ellen, és hogyan ellenőrizze webkörnyezetben.

Forrás: https://phpsos.de/hu/blog/session-upload-progress-abschalten/  
Állapot: 2026. 10. 25.  
Szolgáltató: PHP SOS, PHP-vészhelyzeti segítség és szerverbiztonság. Azonnali segítség WhatsAppon: https://wa.me/491736494914?text=%C3%9Cdv%C3%B6zl%C3%B6m%2C%20PHP%20SOS%21%20Seg%C3%ADts%C3%A9gre%20van%20sz%C3%BCks%C3%A9g%C3%BCnk%20a%20PHP-szerver%C3%BCnkkel.%20C%C3%A9g%3A%20%E2%80%A6%20Weboldal%3A%20%E2%80%A6

**Röviden:** Állítsa be a `session.upload_progress.enabled=0` értéket a php.ini-ben, a PHP-FPM-poolban vagy az Apache szerverkonfigurációjában, soha nem az `ini_set()`-tel vagy a `.user.ini`-vel, majd indítsa újra az összes PHP-workert. Az intézkedés csak akkor válik tartóssá, ha az érték zárolva van a visszakapcsolás ellen, minden üzemmódban és minden telepített PHP-verzióban érvényes, és a frissítések után ellenőrzik.

## Egy kis beállítás kettős hatással

Ritkán kapott egyetlen PHP-beállítás ennyi figyelmet. Amikor a php.net 2026. október 21-én közzétette a PHP2Shell elleni javításokat, a `session.upload_progress.enabled=0` az átmeneti intézkedések listáján állt. Két nappal később jött a CVE-2026-115560-ra vonatkozó tudnivaló, és az ajánlott megoldás ugyanaz a beállítás volt.

Sok adminisztrátor ezekben a napokban gyorsan beállította. Hogy mindenhol hat-e, az egy másik kérdés. A tipikus hézagokat gyorsan fel lehet sorolni: az érték csak a CLI-konfigurációban áll, egy második PHP-verziót elfelejtettek, vagy egy tárhelypanel a következő mentéskor felülírta a fájlt. Ez a cikk megmutatja, hogyan valósítsa meg az intézkedést úgy, hogy három hónap múlva is érvényes legyen.

Fontos előre: a kikapcsolás nem pótolja a PHP-frissítést. Szakmai beszámolók szerint a `session.upload_progress.enabled=0` önmagában nem zárja le mindkét PHP2Shell-rést. Hogy a CVE-2026-115560 pontosan mit érint, azt a [CVE-2026-115560: a session upload progress tudnivaló](https://phpsos.de/hu/php2shell/cve-2026-115560/) oldal magyarázza.

## Mit csinál a funkció, és kinek kell

A session upload progress egy fájlfeltöltés közben folyamatosan a munkamenetbe írja az előrehaladást, hogy egy alkalmazás előrehaladásjelzőt jeleníthessen meg. A PHP-ban a funkció alapértelmezetten be van kapcsolva. A PHP kézikönyve maga is rámutat, hogy ekkor a feladó által szállított fájl- és mezőnevek ellenőrizetlenül kerülnek a munkamenet-tárba, és azt javasolja, hogy kapcsolják ki a funkciót, ha az alkalmazás nem használja.

Hogy az Ön alkalmazása használja-e, azt egy tisztán olvasó kódkereséssel tudhatja meg:

```bash
# Az előrehaladás-funkció használatát keresi az alkalmazáskódban
grep -rn --include="*.php" -e "upload_progress" -e "PHP_SESSION_UPLOAD_PROGRESS" /var/www/
```

Ha a keresés nem talál semmit, a funkciót érezhető következmények nélkül kikapcsolhatja. Ha vannak találatok, az alkalmazás csak az előrehaladásjelzőt veszíti el, a feltöltést nem. A modern űrlapok az előrehaladást úgyis többnyire a böngészőben mérik.

## A session.upload_progress.enabled beállítása a megfelelő helyen

A beállítás a PHP kézikönyve szerint az `INI_PERDIR` módú. Ez azt jelenti: beállítható a php.ini-ben, a szerverkonfigurációban, a `.htaccess`-ben (csak mod_php) és a `.user.ini`-ben (csak FPM és CGI), de futásidőben nem. A php.net a `.user.ini`-t az intézkedés helyeként kifejezetten kizárja. A következő táblázat üzemmódonként mutatja az értelmes helyeket.

| Üzemmód | Ajánlott hely | Zárol a felülírás ellen? | Utána újraindítandó |
|---|---|---|---|
| PHP-FPM | a pool fájlja `php_admin_flag`-gel | igen | minden FPM-szolgáltatás |
| PHP-FPM | az FPM SAPI php.ini-je | nem, a `.user.ini` felülírhatja | minden FPM-szolgáltatás |
| Apache mod_php-val | VirtualHost vagy szerverkonfiguráció `php_admin_flag`-gel | igen | az Apache teljesen |
| php-cgi, LiteSpeed, FrankenPHP | az adott futtatókörnyezet php.ini-je | felépítéstől függően ellenőrizni | a futtatókörnyezet összes folyamata |
| Docker-image | saját fájl a `/usr/local/etc/php/conf.d/` alatt építéskor | igen, ha nincs felülírás engedélyezve | a konténert újra létrehozni |

A két robusztus változat így néz ki:

```ini
; PHP-FPM, pl. /etc/php/8.3/fpm/pool.d/seite1.conf
php_admin_flag[session.upload_progress.enabled] = off
```

```apache
# Apache mod_php-val, a VirtualHostban vagy szerverszinten
<IfModule php_module>
    php_admin_flag session.upload_progress.enabled off
</IfModule>
```

Ezenkívül megéri a bejegyzés minden webes SAPI php.ini-jében alapértékként. Ekkor a beállítás azokra az új poolokra is érvényes, amelyeket később valaki létrehoz. Hogy a `php_admin_flag` miért hoz különbséget, azt a [php_admin_value: beállítások zárolása a felülírás ellen](https://phpsos.de/hu/blog/php-admin-value-sperren/) cikk írja le.

## A hatékonyság ellenőrzése webkörnyezetben

A parancssor gyakran más php.ini-t olvas, mint a webszerver. A `php -i` ezért keveset bizonyít. A `php-fpm8.3 -i` is csak a php.ini értékeit mutatja, nem a poolokban lévő bejegyzéseket. Megbízható csak az a lekérdezés, amely ténylegesen a poolon keresztül fut.

Így járjon el:

1. Indítsa újra az összes PHP-szolgáltatást, például `systemctl restart php8.3-fpm`, vagy az Apache-ot mod_php esetén. Újraindítás nélkül a régi érték fut tovább.
2. Helyezzen a webrootba egy rövid, véletlenszerű nevű ellenőrző fájlt, amely csak az aktuális értéket írja ki.
3. Hívja meg egyszer a fájlt a valódi domainen keresztül, és jegyezze fel az eredményt.
4. Azonnal törölje a fájlt újra, és ismételje meg a lépést minden weboldalra és minden poolra.

```php
<?php
// Ellenőrző fájl: csak rövid időre helyezze el, utána azonnal törölje
header('Content-Type: text/plain');
echo 'session.upload_progress.enabled = ', var_export(ini_get('session.upload_progress.enabled'), true), "\n";
echo 'PHP ', PHP_VERSION, ' / SAPI ', PHP_SAPI, "\n";
```

Üres érték vagy `'0'` az elvárt. Ha `'1'` áll ott, a beállítása ebben a poolban nem hat. Egy PHP-frissítés után ezenkívül ellenőrizze, hogy az összes worker újra lett-e indítva, ahogyan a [PHP-FPM és az összes worker újraindítása](https://phpsos.de/hu/php2shell/php-fpm-neustart/) leírja.

> **Fontos:**
> Ellenőrző fájlokat soha ne hagyjon ott. Elárulják a verziókat és a konfigurációt, és az automatizált vizsgálatok kedvelt célpontjai.

## Hogy a beállítás tartósan megmaradjon

A legtöbb visszaesést nem a támadók okozzák, hanem az üzemeltetés. Egy új poolt egy régi sablonból másolnak, egy csomagfrissítés új php.ini-t hoz létre, vagy valaki átállítja a PHP-verziót a tárhelypanelben. Az ilyen visszaesések ellen szilárd szokások segítenek.

- **Minden verziót lefedni:** Sok szerveren több PHP-verzió fut párhuzamosan. Mindegyiknek saját konfigurációs mappái vannak, és szüksége van a bejegyzésre.
- **Sablonokat igazítani:** A pool-sablonok, Ansible-szerepek, Dockerfile-ok és panelsablonok tartalmazzák az értéket, hogy az új weboldalak automatikusan örököljék.
- **A panelbeállításokat használni:** A tárhelypaneleknél az érték a panel által előirányzott kiegészítő direktívákba való, különben a következő módosítás felülírja a kézi munkát.
- **Frissítések után ellenőrizni:** Az előző szakasz ellenőrzése minden PHP-frissítés ellenőrzőlistájához tartozik.
- **Dokumentálni:** Rögzítse a dátumot, a szervert, a poolokat és az eredményt. Ez később segít a vezetés, a biztosító vagy a vizsgálók felé.

Aki a `.user.ini`-t egyáltalán nem használja, az ilyen fájlok beolvasását a php.ini-ben a `user_ini.filename =` beállítással teljesen kikapcsolhatja. Ez azonban minden olyan beállítást érint, amelyet az alkalmazások ott helyeznek el. Ezt a lépést ezért előtte tesztelje, különösen olyan CMS-eknél, amelyek saját `.user.ini` fájlokat írnak.

A php.net további átmeneti intézkedései, például a `post_max_size` határai és a cgroupon keresztüli memóriahatár, összegyűjtve az [Azonnali intézkedések, ha még nem tud javítani](https://phpsos.de/hu/php2shell/sofortmassnahmen-ohne-patch/) oldalon találhatók. Hogyan rendezi a PHP alapvetően a konfigurációs szintjeit, azt [A php.ini magyarázata](https://phpsos.de/hu/php/php-ini-erklaert/) írja le.

## Hogyan segít konkrétan a PHP SOS?

- **A készlet felvétele:** Megállapítjuk a szerverein lévő összes PHP-verziót, üzemmódot és poolt, és kiolvassuk a webkörnyezetben érvényes értékeket.
- **Tiszta beállítás:** A beállítást zárolva írjuk be a poolokba és a szerverkonfigurációba, és az összes workert ellenőrzötten újraindítjuk.
- **A működés tesztelése:** A feltöltési űrlapokat és a médiakezelést az átállás után ellenőrizzük.
- **A visszaesések megakadályozása:** A sablonokat, telepítéseket és panelbeállításokat igazítjuk, és az állapotot a [szerverkeményítés](https://phpsos.de/hu/leistungen/server-haertung/) keretében dokumentáljuk.


## Gyakori kérdések

**Miért nem hat a session.upload_progress.enabled=0 az ini_set()-en keresztül?**  
A PHP kézikönyve szerint a beállítás az INI_PERDIR módhoz tartozik. Ezért egyáltalán nem módosítható futásidőben az ini_set()-tel. A php.net helyes helyként a php.ini-t, az FPM-poolt vagy a szerverkonfigurációt nevezi meg, a .user.ini-t kifejezetten kizárja.

**Működnek még a fájlfeltöltések a kikapcsolás után?**  
Igen. Csak az az előrehaladási jelzés kapcsol ki, amelyet a PHP a feltöltés közben a munkamenetbe ír. Maga a feltöltés tovább fut. Csak azok az alkalmazások érintettek, amelyek az előrehaladásjelzőjüket éppen erre a PHP-funkcióra építik.

**Visszakapcsolhatja egy alkalmazás a funkciót?**  
Mod_php esetén egy .htaccess fájlon, PHP-FPM esetén egy .user.ini-n keresztül elvileg lehetséges, amíg az érték nincs zárolva. A poolban vagy az Apache-konfigurációban lévő php_admin_flag-gel ezt megakadályozza.

**Vissza kell állítanom az értéket a következő PHP-frissítés után?**  
Nem, ez nem szükséges. A funkciót az alkalmazások többsége nem használja, és a PHP kézikönyve maga is azt javasolja, hogy ilyen esetekben kapcsolják ki. Minden frissítés után csak azt ellenőrizze, hogy az érték még érvényes-e.

## Források

- [php.net: biztonsági közlemények](https://www.php.net/)
- [PHP kézikönyv: munkamenet-konfiguráció](https://www.php.net/manual/en/session.configuration.php)
- [PHP kézikönyv: .user.ini fájlok](https://www.php.net/manual/en/configuration.file.per-user.php)
