# session.upload_progress izslēgšana: pareizi un pastāvīgi

> session.upload_progress.enabled=0 pareizi iestatīt: kur vērtība darbojas, kā to nobloķēt pret atkārtotu ieslēgšanu un droši pārbaudīt tīmekļa kontekstā.

Avots: https://phpsos.de/lv/blog/session-upload-progress-abschalten/  
Aktuāls uz: 25.10.2026  
Pakalpojuma sniedzējs: PHP SOS, PHP ārkārtas palīdzība un serveru drošība. Tūlītēja palīdzība pa WhatsApp: https://wa.me/491736494914?text=Sveiki%2C%20PHP%20SOS%2C%20mums%20nepiecie%C5%A1ama%20pal%C4%ABdz%C4%ABba%20ar%20m%C5%ABsu%20PHP%20serveri.%20Uz%C5%86%C4%93mums%3A%20%E2%80%A6%20Vietne%3A%20%E2%80%A6

**Īsi sakot:** Iestatiet `session.upload_progress.enabled=0` failā php.ini, PHP-FPM pūlā vai Apache servera konfigurācijā, nekad ar `ini_set()` vai `.user.ini`, un pēc tam pārstartējiet visus PHP worker procesus. Pasākums kļūst pastāvīgs tikai tad, kad vērtība ir nobloķēta pret atkārtotu ieslēgšanu, darbojas katrā darbības režīmā un katrā uzstādītajā PHP versijā un tiek pārbaudīta pēc atjauninājumiem.

## Neliels iestatījums ar dubultu ietekmi

Reti kāds atsevišķs PHP iestatījums ir saņēmis tik daudz uzmanības. Kad php.net 2026. gada 21. oktobrī publicēja ielāpus pret PHP2Shell, `session.upload_progress.enabled=0` bija pārejas pasākumu sarakstā. Divas dienas vēlāk sekoja norāde par CVE-2026-115560, un ieteiktā aizsardzība bija tas pats iestatījums.

Daudzi administratori šajās dienās to ātri iestatīja. Vai tas darbojas visur, ir cits jautājums. Tipiskos robus var uzskaitīt ātri: vērtība ir tikai CLI konfigurācijā, otra PHP versija tika aizmirsta vai hostinga panelis fails pārrakstīja nākamajā saglabāšanā. Šis raksts rāda, kā pasākumu īstenot tā, lai tas darbotos arī pēc trim mēnešiem.

Svarīgi jau iepriekš: izslēgšana neaizstāj PHP atjauninājumu. Saskaņā ar speciālistu ziņojumiem `session.upload_progress.enabled=0` vien neaizver abas PHP2Shell ievainojamības. Ko tieši skar CVE-2026-115560, izskaidro lapa [CVE-2026-115560: norāde par session upload progress](https://phpsos.de/lv/php2shell/cve-2026-115560/).

## Ko funkcija dara un kam tā vajadzīga

Session upload progress failu augšupielādes laikā nepārtraukti ieraksta progresu sesijā, lai lietojumprogramma varētu rādīt progresa joslu. PHP funkcija pēc noklusējuma ir ieslēgta. PHP rokasgrāmata pati norāda, ka tādējādi sūtītāja piegādātie faila un lauku nosaukumi nepārbaudīti nonāk sesijas glabātuvē, un iesaka funkciju izslēgt, ja lietojumprogramma to nelieto.

Vai jūsu lietojumprogramma to lieto, noskaidrojiet ar tīri lasāmu meklēšanu kodā:

```bash
# Meklē progresa funkcijas lietojumus lietojumprogrammas kodā
grep -rn --include="*.php" -e "upload_progress" -e "PHP_SESSION_UPLOAD_PROGRESS" /var/www/
```

Ja meklēšana neko neatrod, funkciju varat izslēgt bez jūtamām sekām. Ja ir trāpījumi, lietojumprogramma zaudē tikai progresa rādījumu, nevis augšupielādi. Mūsdienīgas veidlapas progresu parasti tāpat mēra pārlūkā.

## session.upload_progress.enabled iestatīšana pareizajā vietā

Iestatījumam saskaņā ar PHP rokasgrāmatu ir režīms `INI_PERDIR`. Tas nozīmē: to var iestatīt failā php.ini, servera konfigurācijā, `.htaccess` (tikai mod_php) un `.user.ini` (tikai FPM un CGI), bet ne izpildes laikā. php.net `.user.ini` kā pasākuma vietu nepārprotami izslēdz. Turpmākā tabula rāda saprātīgās vietas pa darbības režīmiem.

| Darbības režīms | Ieteicamā vieta | Vai nobloķē pret pārrakstīšanu? | Pēc tam pārstartēt |
|---|---|---|---|
| PHP-FPM | pūla fails ar `php_admin_flag` | jā | katru FPM pakalpojumu |
| PHP-FPM | FPM SAPI php.ini | nē, `.user.ini` varētu pārrakstīt | katru FPM pakalpojumu |
| Apache ar mod_php | VirtualHost vai servera konfigurācija ar `php_admin_flag` | jā | Apache pilnībā |
| php-cgi, LiteSpeed, FrankenPHP | attiecīgās izpildes vides php.ini | pārbaudīt atkarībā no uzbūves | visus izpildes vides procesus |
| Docker attēls | savs fails `/usr/local/etc/php/conf.d/` būvēšanas laikā | jā, ja pārrakstīšana nav atļauta | konteineru izveidot no jauna |

Abi izturīgie varianti izskatās šādi:

```ini
; PHP-FPM, piem., /etc/php/8.3/fpm/pool.d/seite1.conf
php_admin_flag[session.upload_progress.enabled] = off
```

```apache
# Apache ar mod_php, VirtualHost vai visā serverī
<IfModule php_module>
    php_admin_flag session.upload_progress.enabled off
</IfModule>
```

Papildus ir vērts veikt ierakstu katras tīmekļa SAPI php.ini kā pamatvērtību. Tad iestatījums darbojas arī jauniem pūliem, ko vēlāk kāds izveidos. Kāpēc `php_admin_flag` rada atšķirību, apraksta raksts [php_admin_value: iestatījumu bloķēšana pret pārrakstīšanu](https://phpsos.de/lv/blog/php-admin-value-sperren/).

## Efektivitātes pārbaude tīmekļa kontekstā

Komandrinda bieži lasa citu php.ini nekā tīmekļa serveris. `php -i` tāpēc pierāda maz. Arī `php-fpm8.3 -i` rāda tikai php.ini vērtības, nevis ierakstus no pūliem. Uzticams ir tikai vaicājums, kas patiešām darbojas caur pūlu.

Rīkojieties šādi:

1. Pārstartējiet visus PHP pakalpojumus, piemēram, `systemctl restart php8.3-fpm` vai Apache mod_php gadījumā. Bez pārstartēšanas vecā vērtība turpina darboties.
2. Tīmekļa saknē novietojiet īsu pārbaudes failu ar nejaušu nosaukumu, kas izvada tikai pašreizējo vērtību.
3. Failu vienreiz izsauciet caur īsto domēnu un pierakstiet rezultātu.
4. Failu nekavējoties izdzēsiet un soli atkārtojiet katrai vietnei un katram pūlam.

```php
<?php
// Pārbaudes fails: novietot tikai uz īsu laiku, pēc tam nekavējoties izdzēst
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";
```

Sagaidāma ir tukša vērtība vai `'0'`. Ja tur ir `'1'`, jūsu iestatījums šajā pūlā nedarbojas. Pēc PHP atjauninājuma papildus pārbaudiet, vai visi worker procesi ir pārstartēti, kā aprakstīts sadaļā [PHP-FPM un visu worker procesu pārstartēšana](https://phpsos.de/lv/php2shell/php-fpm-neustart/).

> **Svarīgi:**
> Nekad neatstājiet pārbaudes failus. Tie atklāj versijas un konfigurāciju un ir iecienīts automatizētu skenēšanu mērķis.

## Lai iestatījums paliktu pastāvīgi

Lielākā daļa atkāpju rodas nevis uzbrucēju, bet ekspluatācijas dēļ. Jauns pūls tiek nokopēts no vecas veidnes, pakotnes atjauninājums izveido jaunu php.ini vai kāds hostinga panelī pārslēdz PHP versiju. Pret šādām atkāpēm palīdz stingri ieradumi.

- **Aptvert visas versijas:** daudzos serveros paralēli darbojas vairākas PHP versijas. Katrai ir savas konfigurācijas mapes, un tai vajadzīgs ieraksts.
- **Pielāgot veidnes:** pūlu veidnēs, Ansible lomās, Dockerfile un panelu veidnēs ir vērtība, lai jaunas vietnes to mantotu automātiski.
- **Izmantot paneļa iestatījumus:** hostinga paneļos vērtībai jāatrodas paneļa paredzētajās papildu direktīvās, citādi nākamā izmaiņa pārraksta rokas darbu.
- **Pārbaudīt pēc atjauninājumiem:** iepriekšējās sadaļas pārbaude pieder katra PHP atjauninājuma kontrolsarakstam.
- **Dokumentēt:** fiksēt datumu, serveri, pūlus un rezultātu. Tas vēlāk palīdz attiecībās ar vadību, apdrošinātāju vai revidentiem.

Kas `.user.ini` nelieto vispār, tas šādu failu nolasīšanu var pilnībā izslēgt ar `user_ini.filename =` failā php.ini. Taču tas skar visus iestatījumus, ko lietojumprogrammas tur glabā. Šo soli tāpēc iepriekš testējiet, īpaši CMS, kas raksta savus `.user.ini` failus.

Pārējie php.net pārejas pasākumi, piemēram, robežas `post_max_size` un atmiņas robeža ar cgroup, apkopoti sadaļā [Tūlītēji pasākumi, ja vēl nevarat ielāpot](https://phpsos.de/lv/php2shell/sofortmassnahmen-ohne-patch/). Kā PHP principā kārto savus konfigurācijas līmeņus, izskaidro [php.ini skaidrojums](https://phpsos.de/lv/php/php-ini-erklaert/).

## Kā PHP SOS palīdz konkrēti?

- **Uzskaitīt esošo stāvokli:** mēs noskaidrojam visas PHP versijas, darbības režīmus un pūlus jūsu serveros un nolasām spēkā esošās vērtības tīmekļa kontekstā.
- **Iestatīt pareizi:** mēs ierakstām iestatījumu nobloķētu pūlos un servera konfigurācijā un kontrolēti pārstartējam visus worker procesus.
- **Pārbaudīt funkciju:** augšupielādes veidlapas un mediju pārvaldību pēc pārejas pārbaudām.
- **Novērst atkāpes:** veidnes, izvietošanas un paneļu iestatījumus pielāgojam un stāvokli dokumentējam [serveru nostiprināšanas](https://phpsos.de/lv/leistungen/server-haertung/) ietvaros.


## Biežāk uzdotie jautājumi

**Kāpēc session.upload_progress.enabled=0 nedarbojas caur ini_set()?**  
Saskaņā ar PHP rokasgrāmatu iestatījums pieder režīmam INI_PERDIR. Tāpēc to vispār nevar mainīt izpildes laikā ar ini_set(). php.net kā pareizas vietas min php.ini, FPM pūlu vai servera konfigurāciju un nepārprotami izslēdz .user.ini.

**Vai failu augšupielādes pēc izslēgšanas joprojām darbojas?**  
Jā. Tiek izslēgts tikai progresa ziņojums, ko PHP augšupielādes laikā ieraksta sesijā. Pati augšupielāde turpinās. Skartas ir tikai lietojumprogrammas, kas savu progresa joslu veido tieši ar šo PHP funkciju.

**Vai lietojumprogramma funkciju var atkal ieslēgt?**  
Ar .htaccess failu mod_php gadījumā vai .user.ini PHP-FPM gadījumā tas principā ir iespējams, kamēr vērtība nav nobloķēta. Ar php_admin_flag pūlā vai Apache konfigurācijā to novērš.

**Vai pēc nākamā PHP atjauninājuma vērtība man jāatiestata?**  
Nē, tas nav vajadzīgs. Funkciju vairums lietojumprogrammu nelieto, un PHP rokasgrāmata pati iesaka to šādos gadījumos izslēgt. Pēc katra atjauninājuma pārbaudiet tikai, vai vērtība joprojām darbojas.

## Avoti

- [php.net: drošības paziņojumi](https://www.php.net/)
- [PHP rokasgrāmata: sesiju konfigurācija](https://www.php.net/manual/en/session.configuration.php)
- [PHP rokasgrāmata: .user.ini faili](https://www.php.net/manual/en/configuration.file.per-user.php)
