# php.ini turvaline seadistamine

> php.ini turvaline seadistus: vigade, sessioonide, üleslaadimiste ja mälu seaded ning php.net-i PHP2Shelli üleminekumeetmed kopeerimiseks.

Allikas: https://phpsos.de/et/ratgeber/php-ini-sicher-konfigurieren/  
Seis: 25.10.2026  
Pakkuja: PHP SOS, PHP hädaabi ja serveri turvalisus. Kohene abi WhatsAppis: https://wa.me/491736494914?text=Tere%2C%20PHP%20SOS%2C%20vajame%20abi%20oma%20PHP-serveriga.%20Ettev%C3%B5te%3A%20%E2%80%A6%20Veebisait%3A%20%E2%80%A6

**Lühidalt:** php.ini turvalisuse jaoks loevad eelkõige neli valdkonda: vealoendid ei lähe väljapoole, turvalised sessiooniküpsised, piiratud üleslaadimised ja lukustatud väärtused, mida rakendused üle kirjutada ei saa. Pärast PHP2Shelli lisanduvad php.net-i üleminekumeetmed, eelkõige `session.upload_progress.enabled=0`. Turvaline seadistus ei asenda aga kunagi uuendust.

## Miks on php.ini pärast PHP2Shelli taas tähelepanu all

php.ini on PHP keskne seadistusfail. Paljudes serverites seati see korra üles ja siis puudutati vaevalt. PHP2Shelliga on see muutunud: kahe turvaaugu CVE-2026-109618 ja CVE-2026-109619 jaoks nimetab php.net üleminekumeetmeid, mis rakenduvad just siin.

Turvaaugud ise asuvad PHP interpretaatoris. Need on parandatud versioonides PHP 8.5.12, 8.4.27, 8.3.36 ja 8.2.35, mis avaldati 21.10.2026. Hea seadistus aitab siiski kahel viisil: see võib ärakasutamist raskendada ja piirab kahju, kui midagi peaks läbi pääsema.

Paljud haldajad ei tea lisaks täpselt, millised seaded nende serveris kehtivad. See on esimene samm.

## Milline php.ini teie serveris kehtib?

PHP võib töörežiimist olenevalt lugeda erinevaid seadistusfaile. Käsurea, PHP-FPM-il ja Apache'il koos mod_php-ga on Debianis ja Ubuntus näiteks igaühel oma kaust kataloogis `/etc/php/<version>/`. Kes muudab ainult CLI faili, ei muuda veebisaidi jaoks midagi.

```bash
# Käsurea seadistusfailid
php --ini
# PHP-FPM seadistus (kohandage versiooninumbrit)
php-fpm8.3 -i | grep -E "Loaded Configuration|Scan this dir"
# PHP-FPM üksikväärtuste kontroll
php-fpm8.3 -i | grep -E "^(expose_php|display_errors|session.upload_progress.enabled) "
```

Lisaks võivad väärtused olla FPM-i poolis, Apache'i seadistuses, failis `.htaccess` (ainult mod_php) või failis `.user.ini` (FPM ja CGI). Millist versiooni server tegelikult kasutab ja kas backport on sees, selgitab artikkel [PHP versiooni ja paigaseisu õige kontrollimine](https://phpsos.de/et/php2shell/php-version-pruefen/).

## Põhiseaded suurema php.ini turvalisuse jaoks

Järgmised väärtused on enamiku tootmisserverite jaoks mõistlikud. Kontrollige enne kasutuselevõttu testkeskkonnas, kas teie rakendus tuleb kõigi väärtustega toime.

```ini
; Ei mingit versiooniteavet HTTP päises
expose_php = Off

; Vead logida, kuid mitte kunagi brauseris kuvada
display_errors = Off
display_startup_errors = Off
log_errors = On
error_log = /var/log/php/error.log

; Ei lisata faile kaugaadressidelt
allow_url_include = Off
; allow_url_fopen jätta aktiivseks ainult siis, kui rakendus seda vajab
allow_url_fopen = Off

; Sessioonid: ranged, ainult HTTPS-i kaudu, JavaScriptiga mitte loetavad
session.use_strict_mode = 1
session.use_only_cookies = 1
session.cookie_secure = 1
session.cookie_httponly = 1
session.cookie_samesite = Lax

; Tööaeg ja sisendid piirata
max_execution_time = 30
max_input_time = 60
max_input_vars = 1000
```

`allow_url_fopen` vajavad mõned rakendused uuenduste või liideste jaoks. Lülitage see välja ainult siis, kui olete seda enne kontrollinud. Funktsioone, mis käivitavad süsteemikäske, saab lisaks lukustada; kuidas see õnnestub kõrvalmõjudeta, selgitab juhend [disable_functions õige kasutamine](https://phpsos.de/et/ratgeber/disable-functions/).

## php.net-i üleminekumeetmed PHP2Shelli vastu

Kui te ei saa kohe paigata, nimetab php.net mitu seadet, mis riski vähendavad. Need ei ole sõnaselgelt täielik kaitse, vaid sild uuenduseni.

```ini
; Sessiooni üleslaadimise edenemine välja lülitada (ka CVE-2026-115560 tõttu)
session.upload_progress.enabled = 0

; Päringu suurust piirata: 8M ilma üleslaadimisteta, 32M üleslaadimistega
post_max_size = 8M
upload_max_filesize = 6M

; Ainult PHP 8.5: ei mingeid backtrace'e tõsiste vigade korral
fatal_error_backtraces = 0
```

Lisaks soovitab php.net seada `memory_limit=-1` nii, et rakendused ei saa väärtust üle kirjutada, ja tõmmata mälupiiri hoopis konteineri või cgroup-i kaudu, mitte `RLIMIT_AS` ega `RLIMIT_DATA` abil. See meede kuulub FPM-i pooli või serveri seadistusse ja seda tuleks kombineerida toimiva cgroup-piiriga. Täieliku ülevaate leiate lehelt [Kiirmeetmed, kui te ei saa veel paigata](https://phpsos.de/et/php2shell/sofortmassnahmen-ohne-patch/).

> **Oluline:**
> `session.upload_progress.enabled=0` toimib ainult php.ini-st, FPM-i poolist või serveri seadistusest. Käsuga `ini_set()` või failis `.user.ini` seatuna see meede ei rakendu. Seejärel taaskäivitage kõik töötajad.

## Väärtuste lukustamine ülekirjutamise vastu

Paljud rakendused seavad oma väärtusi, näiteks mälu või üleslaadimiste jaoks. Käskudega `php_admin_value` ja `php_admin_flag` fikseerite seaded nii, et neid ei saa muuta ei `ini_set()` ega `.user.ini`. FPM-i poolis näeb see välja nii:

```ini
; /etc/php/8.3/fpm/pool.d/meine-seite.conf (väljavõte)
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'is koos mod_php-ga kehtib sama loogika käskudega `php_admin_value` ja `php_admin_flag` VirtualHost'i seadistuses. Seejärel laadige teenus uuesti ja kontrollige aktiivset väärtust:

```bash
sudo systemctl reload php8.3-fpm
# Protsesside käivitusaeg: kas see on pärast muudatust?
ps -eo pid,lstart,cmd | grep "[p]hp-fpm"
```

Reload käivitab PHP-FPM-i töötajad uuesti. Pärast PHP uuendust on aga vaja kõigi PHP protsesside täielikku taaskäivitust, et mälus ei jätkaks töötamist ükski vana protsess. Mitme veebisaidi korral ühes serveris tasub lisaks kasutada iga saidi jaoks oma poolit, lisateavet leiate juhendist [open_basedir ja isolatsioon saidi kaupa](https://phpsos.de/et/ratgeber/open-basedir/).

## Sagedased vead ja lühike kontrollnimekiri

Enamik php.ini probleeme ei teki valedest väärtustest, vaid väärtustest vales kohas. Tüüpiline on muudetud CLI fail, samal ajal kui veebisait töötab PHP-FPM-iga. Sama sageli jääb pärast muudatust taaskäivitus tegemata või kirjutab hostingupaneel teie enda seade järgmisel salvestamisel üle.

Teine klassika on nähtavad veateated live-veebisaidil. Need reedavad teid, andmebaasinimesid või versioone ja aitavad ründajatel orienteeruda. Just pärast kolimist või uuesti paigaldamist on `display_errors` sageli jälle väärtusel `On`.

Neid punkte tuleks kontrollida pärast iga muudatust ja iga PHP uuendust:

1. Millist seadistusfaili veebi töörežiim loeb ja kas see sisaldab teie väärtusi?
2. Kas `display_errors` ja `expose_php` on välja lülitatud, kas veeglogi on kirjutatav?
3. Kas `session.upload_progress.enabled` on `0`, seatud php.ini või poolide kaudu?
4. Kas üleslaadimise ja päringu suurused on rakendusele sobivalt piiratud?
5. Kas kõigi PHP protsesside käivitusaeg on pärast viimast muudatust?

Fikseerige tulemus kuupäevaga. Nii saab hiljem tõendada, millal milline seade kehtis.

## Kuidas PHP SOS konkreetselt aitab?

- Selgitame välja, milline seadistus on millises töörežiimis tegelikult aktiivne.
- Rakendame kooskõlastatud põhiseadistuse ja PHP2Shelli üleminekumeetmed, testituna teie rakendusega.
- Lukustame turvaseaded ülekirjutamise vastu ja taaskäivitame kõik töötajad kontrollitult.
- Dokumenteerime seaded ja kontrolli tulemuse, et hilisemad muudatused jääksid jälgitavaks.

Kuidas näeb välja püsiv kaitse, kirjeldab teenus [Serveri karastamine PHP veebiserveritele](https://phpsos.de/et/leistungen/server-haertung/).


## Korduma kippuvad küsimused

**Millist php.ini faili minu veebiserver tegelikult kasutab?**  
See ei ole sageli sama, mis käsureal. PHP-FPM-il, Apache'il koos mod_php-ga ja CLI-l on tavaliselt oma seadistuskaustad. Kontrollige aktiivset faili seetõttu vastava töörežiimi kaudu, näiteks käsuga php-fpm -i või ajutiselt paigutatud kontrollfailiga.

**Kas turvaline php.ini asendab PHP uuendust?**  
Ei. Seaded vähendavad ründepinda ja raskendavad ärakasutamist, kuid ei sulge PHP interpretaatoris olevat auku. Ka php.net-i PHP2Shelli üleminekumeetmed ei ole sõnaselgelt täielik kaitse.

**Mis vahe on php_value ja php_admin_value vahel?**  
Käsuga php_value seatud väärtusi võib rakendus tööajal uuesti muuta. Väärtused, mis on seatud käsuga php_admin_value FPM-i poolis või Apache'i seadistuses, on rakenduse eest aga lukustatud, ka ini_set() ja .user.ini eest.

**Kas pean pärast php.ini muutmist taaskäivitama?**  
Jah. PHP-FPM ja Apache koos mod_php-ga loevad seadistust ainult käivitamisel. Uued väärtused kehtivad alles kõigi mõjutatud teenuste taaskäivitamise või uuestilaadimise (reload) järel.

## Allikad

- [php.net: turvateated](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)
