# php.ini drošā konfigurēšana

> php.ini drošā konfigurēšana: iestatījumi kļūdām, sesijām, augšupielādēm un atmiņai, kā arī php.net pagaidu pasākumi pret PHP2Shell kopēšanai.

Avots: https://phpsos.de/lv/ratgeber/php-ini-sicher-konfigurieren/  
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:** php.ini drošībai svarīgas ir galvenokārt četras jomas: nekādu kļūdu paziņojumu uz āru, drošas sesiju sīkdatnes, ierobežotas augšupielādes un bloķētas vērtības, ko lietojumprogrammas nevar pārrakstīt. Pēc PHP2Shell klāt nāk php.net pagaidu pasākumi, galvenokārt `session.upload_progress.enabled=0`. Droša konfigurācija tomēr nekad neaizstāj atjauninājumu.

## Kāpēc php.ini pēc PHP2Shell atkal ir uzmanības lokā

php.ini ir PHP centrālais konfigurācijas fails. Daudzos serveros tas ir iestatīts vienreiz un pēc tam gandrīz neaiztikts. Ar PHP2Shell tas ir mainījies: abām ievainojamībām CVE-2026-109618 un CVE-2026-109619 php.net nosauc pagaidu pasākumus, kas uzstādāmi tieši šeit.

Pašas ievainojamības ir PHP interpretatorā. Tās ir izlabotas PHP 8.5.12, 8.4.27, 8.3.36 un 8.2.35, publicētas 21.10.2026. Laba konfigurācija tomēr palīdz divējādi: tā var apgrūtināt izmantošanu un ierobežo kaitējumu, ja tomēr kaut kas izlaužas cauri.

Daudzi operatori turklāt precīzi nezina, kuri iestatījumi viņu serverī ir spēkā. Tas ir pirmais solis.

## Kura php.ini ir spēkā jūsu serverī?

PHP atkarībā no darbības režīma var nolasīt dažādus konfigurācijas failus. Komandrindai, PHP-FPM un Apache ar mod_php Debian un Ubuntu sistēmās, piemēram, katram ir sava mape zem `/etc/php/<version>/`. Kas maina tikai CLI failu, tas vietnē neko nemaina.

```bash
# Komandrindas konfigurācijas faili
php --ini
# PHP-FPM konfigurācija (pielāgojiet versijas numuru)
php-fpm8.3 -i | grep -E "Loaded Configuration|Scan this dir"
# PHP-FPM atsevišķu vērtību pārbaude
php-fpm8.3 -i | grep -E "^(expose_php|display_errors|session.upload_progress.enabled) "
```

Papildus vērtības var būt FPM pūlā, Apache konfigurācijā, `.htaccess` (tikai mod_php) vai `.user.ini` (FPM un CGI). Kura versija serverī patiešām darbojas un vai ir iekļauts backports, noskaidro raksts [PHP versijas un ielāpa stāvokļa pareiza pārbaude](https://phpsos.de/lv/php2shell/php-version-pruefen/).

## Pamatiestatījumi lielākai php.ini drošībai

Turpmākās vērtības lielākajai daļai produkcijas serveru ir lietderīgas. Pirms ieviešanas testa vidē pārbaudiet, vai jūsu lietojumprogramma ar visām vērtībām tiek galā.

```ini
; Bez versijas norādes HTTP galvenē
expose_php = Off

; Kļūdas protokolēt, bet nekad nerādīt pārlūkā
display_errors = Off
display_startup_errors = Off
log_errors = On
error_log = /var/log/php/error.log

; Neiekļaut failus no attālām adresēm
allow_url_include = Off
; allow_url_fopen atstāt aktīvu tikai tad, ja lietojumprogramma to prasa
allow_url_fopen = Off

; Sesijas: stingri, tikai caur HTTPS, JavaScript nelasāmas
session.use_strict_mode = 1
session.use_only_cookies = 1
session.cookie_secure = 1
session.cookie_httponly = 1
session.cookie_samesite = Lax

; Ierobežot izpildes laiku un ievades datus
max_execution_time = 30
max_input_time = 60
max_input_vars = 1000
```

`allow_url_fopen` dažām lietojumprogrammām vajadzīgs atjauninājumiem vai saskarnēm. Izslēdziet to tikai tad, ja to esat iepriekš pārbaudījis. Funkcijas, kas izpilda sistēmas komandas, var papildus bloķēt; kā to izdarīt bez blakusefektiem, skaidro ceļvedis [disable_functions pareiza lietošana](https://phpsos.de/lv/ratgeber/disable-functions/).

## php.net pagaidu pasākumi pret PHP2Shell

Ja nevarat ielāpot nekavējoties, php.net nosauc vairākus iestatījumus, kas samazina risku. Tie ir skaidri nepilnīga aizsardzība, nevis pilns risinājums, bet tilts līdz atjauninājumam.

```ini
; Izslēgt sesijas augšupielādes progresu (arī CVE-2026-115560 dēļ)
session.upload_progress.enabled = 0

; Ierobežot pieprasījuma lielumu: 8M bez augšupielādēm, 32M ar augšupielādēm
post_max_size = 8M
upload_max_filesize = 6M

; Tikai PHP 8.5: bez backtrace smagu kļūdu gadījumā
fatal_error_backtraces = 0
```

Papildus php.net iesaka iestatīt `memory_limit=-1` tā, lai lietojumprogrammas šo vērtību nevarētu pārrakstīt, un atmiņas robežu novilkt ar konteineru vai cgroup, nevis ar `RLIMIT_AS` vai `RLIMIT_DATA`. Šis pasākums jāliek FPM pūlā vai servera konfigurācijā, un tas jākombinē ar strādājošu cgroup ierobežojumu. Pilnu pārskatu atradīsiet rakstā [Tūlītējie pasākumi, ja vēl nevarat ielāpot](https://phpsos.de/lv/php2shell/sofortmassnahmen-ohne-patch/).

> **Svarīgi:**
> `session.upload_progress.enabled=0` darbojas tikai no php.ini, FPM pūla vai servera konfigurācijas. Ja tas iestatīts ar `ini_set()` vai `.user.ini`, pasākums nedarbojas. Pēc tam pārstartējiet visus darbprocesus.

## Vērtību bloķēšana pret pārrakstīšanu

Daudzas lietojumprogrammas iestata savas vērtības, piemēram, atmiņai vai augšupielādēm. Ar `php_admin_value` un `php_admin_flag` iestatījumus nofiksējat tā, ka tos nevar mainīt ne `ini_set()`, ne `.user.ini`. FPM pūlā tas izskatās šādi:

```ini
; /etc/php/8.3/fpm/pool.d/meine-seite.conf (fragments)
php_admin_flag[display_errors] = off
php_admin_flag[session.upload_progress.enabled] = off
php_admin_value[memory_limit] = -1
php_admin_value[post_max_size] = 8M
php_admin_value[upload_max_filesize] = 6M
php_admin_value[error_log] = /var/log/php/meine-seite.error.log
```

Apache ar mod_php darbojas tā pati loģika ar `php_admin_value` un `php_admin_flag` VirtualHost konfigurācijā. Pēc tam pakalpojumu pārlādējiet un pārbaudiet aktīvo vērtību:

```bash
sudo systemctl reload php8.3-fpm
# Procesu startēšanas laiks: vai tas ir pēc izmaiņas?
ps -eo pid,lstart,cmd | grep "[p]hp-fpm"
```

Reload pārstartē PHP-FPM darbprocesus. Pēc PHP atjauninājuma turpretī nepieciešama visu PHP procesu pilnīga pārstartēšana, lai atmiņā nepaliktu darbojošies vecs process. Ja vienā serverī ir vairākas vietnes, ir vērts katrai vietnei izveidot savu pūlu, vairāk ceļvedī [open_basedir un izolācija katrai vietnei](https://phpsos.de/lv/ratgeber/open-basedir/).

## Biežākās kļūdas un īss pārbaudes saraksts

Lielākā daļa problēmu ar php.ini rodas nevis nepareizu vērtību dēļ, bet vērtību nepareizā vietā. Tipiski tiek mainīts CLI fails, kamēr vietne darbojas caur PHP-FPM. Tikpat bieži pēc izmaiņas netiek veikta pārstartēšana, vai hostinga panelis nākamajā saglabāšanas reizē pārraksta jūsu iestatījumu.

Otrs klasisks gadījums ir redzami kļūdu paziņojumi aktīvajā vietnē. Tie atklāj ceļus, datubāzu nosaukumus vai versijas un atvieglo uzbrucēju orientēšanos. Tieši pēc pārcelšanās vai atkārtotas uzstādīšanas `display_errors` bieži atkal ir iestatīts uz `On`.

Šos punktus pārbaudiet pēc katras izmaiņas un katra PHP atjauninājuma:

1. Kuru konfigurācijas failu nolasa tīmekļa darbības režīms, un vai tajā ir jūsu vērtības?
2. Vai `display_errors` un `expose_php` ir izslēgti, vai kļūdu žurnālā var rakstīt?
3. Vai `session.upload_progress.enabled` ir `0`, iestatīts ar php.ini vai pūlu?
4. Vai augšupielāžu un pieprasījumu lielumi ir ierobežoti atbilstoši lietojumprogrammai?
5. Vai visiem PHP procesiem startēšanas brīdis ir pēc pēdējās izmaiņas?

Rezultātu fiksējiet ar datumu. Tā vēlāk var pierādīt, kad kāds iestatījums bija spēkā.

## Kā PHP SOS palīdz konkrēti?

- Nosakām, kura konfigurācija kurā darbības režīmā patiešām ir aktīva.
- Ieviešam saskaņotu pamatkonfigurāciju un PHP2Shell pagaidu pasākumus, pārbaudītus ar jūsu lietojumprogrammu.
- Bloķējam drošībai svarīgas vērtības pret pārrakstīšanu un kontrolēti pārstartējam visus darbprocesus.
- Dokumentējam iestatījumus un pārbaudes rezultātu, lai vēlākas izmaiņas paliktu izsekojamas.

Kā izskatās ilgtermiņa aizsardzība, apraksta pakalpojums [Servera nostiprināšana PHP tīmekļa serveriem](https://phpsos.de/lv/leistungen/server-haertung/).


## Biežāk uzdotie jautājumi

**Kuru php.ini mans tīmekļa serveris patiesībā izmanto?**  
Tā bieži nav tā pati, kas komandrindā. PHP-FPM, Apache ar mod_php un CLI parasti izmanto savas konfigurācijas mapes. Tāpēc aktīvo failu pārbaudiet attiecīgajā darbības režīmā, piemēram, ar php-fpm -i vai uz īsu brīdi novietotu pārbaudes failu.

**Vai droša php.ini aizstāj PHP atjauninājumu?**  
Nē. Iestatījumi samazina uzbrukuma virsmu un apgrūtina izmantošanu, bet neaizver ievainojamību PHP interpretatorā. Arī php.net pagaidu pasākumi pret PHP2Shell ir skaidri norādīti kā nepilnīga aizsardzība.

**Kāda ir atšķirība starp php_value un php_admin_value?**  
Ar php_value iestatītās vērtības lietojumprogramma izpildes laikā var atkal mainīt. Vērtības, kas iestatītas ar php_admin_value FPM pūlā vai Apache konfigurācijā, turpretī lietojumprogrammai ir bloķētas, arī ini_set() un .user.ini.

**Vai pēc php.ini izmaiņām jāveic pārstartēšana?**  
Jā. PHP-FPM un Apache ar mod_php nolasa konfigurāciju tikai startējot. Jaunās vērtības stājas spēkā tikai pēc visu skarto pakalpojumu pārstartēšanas vai pārlādes (reload).

## Avoti

- [php.net: drošības ziņojumi](https://www.php.net/)
- [PHP 8 ChangeLog](https://www.php.net/ChangeLog-8.php)
- [OWASP Cheat Sheet Series](https://cheatsheetseries.owasp.org/)
- [BSI IT-Grundschutz](https://www.bsi.bund.de/DE/Themen/Unternehmen-und-Organisationen/Standards-und-Zertifizierung/IT-Grundschutz/it-grundschutz_node.html)
