Aktuális helyzet: PHP2Shell. Két kritikus PHP-rés (CVSS 9,2) lehetővé teszi kártékony kód futtatását bejelentkezés nélkül. Javítások 2026. 10. 21. óta.Mi a teendő most →

A session.upload_progress kikapcsolása: helyesen és tartósan

A CVE-2026-115560 elleni megoldás és az egyik PHP2Shell-átmeneti intézkedés gyorsan beállítható. Hogy tartson, a megfelelő helyen kell állnia, zárolva kell lennie, és minden frissítés után újra ellenőrizni kell.

Állapot 6 perc olvasási időKeményítés és konfiguráció

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ó 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:

# 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:

; PHP-FPM, pl. /etc/php/8.3/fpm/pool.d/seite1.conf
php_admin_flag[session.upload_progress.enabled] = off
# 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 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
// 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 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 oldalon találhatók. Hogyan rendezi a PHP alapvetően a konfigurációs szintjeit, azt A php.ini magyarázata í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 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

Azonnali kapcsolat

Minden óra számít. Írjon nekünk most.

Ismertesse röviden a rendszert, a PHP-verziót és a megfigyelését. Jelentkezünk, tisztázzuk a helyzetet, és távolról dolgozunk, amíg az incidens le nem zárul és dokumentálva nem lesz.

Azonnali segítség