# Sigurna konfiguracija php.ini

> Sigurno konfigurirajte php.ini: postavke za pogreške, sesije, uploade i memoriju te PHP2Shell privremene mjere s php.neta za kopiranje.

Izvor: https://phpsos.de/hr/ratgeber/php-ini-sicher-konfigurieren/  
Stanje: 25.10.2026  
Pružatelj: PHP SOS, PHP hitna pomoć i sigurnost poslužitelja. Hitna pomoć putem WhatsAppa: https://wa.me/491736494914?text=Pozdrav%20PHP%20SOS%2C%20trebamo%20pomo%C4%87%20s%20na%C5%A1im%20PHP%20poslu%C5%BEiteljem.%20Tvrtka%3A%20%E2%80%A6%20Web-stranica%3A%20%E2%80%A6

**Ukratko:** Za sigurnost php.ini ponajprije su važna četiri područja: nikakve poruke o pogreškama prema van, sigurni kolačići sesije, ograničeni uploadi i zaključane vrijednosti koje aplikacije ne mogu prepisati. Nakon PHP2Shella dolaze privremene mjere s php.neta, ponajprije `session.upload_progress.enabled=0`. Sigurna konfiguracija ipak nikad ne zamjenjuje ažuriranje.

## Zašto je php.ini nakon PHP2Shella ponovno u fokusu

php.ini je središnja konfiguracijska datoteka PHP-a. Na mnogim je poslužiteljima jednom postavljena i potom jedva dirana. S PHP2Shellom se to promijenilo: za dvije ranjivosti CVE-2026-109618 i CVE-2026-109619 php.net navodi privremene mjere koje djeluju upravo ovdje.

Same ranjivosti su u PHP interpreteru. Ispravljene su u PHP-u 8.5.12, 8.4.27, 8.3.36 i 8.2.35, objavljenim 21.10.2026. Dobra konfiguracija ipak pomaže na dva načina: može otežati iskorištavanje i ograničava štetu ako nešto ipak prođe.

Mnogi operateri uz to ne znaju točno koje postavke na njihovom poslužitelju vrijede. To je prvi korak.

## Koja php.ini vrijedi na Vašem poslužitelju?

PHP ovisno o načinu rada može čitati različite konfiguracijske datoteke. Naredbeni redak, PHP-FPM i Apache s mod_php na Debianu i Ubuntuu primjerice imaju vlastite mape pod `/etc/php/<version>/`. Tko promijeni samo CLI datoteku, na web-stranici ne mijenja ništa.

```bash
# Konfiguracijske datoteke naredbenog retka
php --ini
# Konfiguracija PHP-FPM-a (prilagodite broj verzije)
php-fpm8.3 -i | grep -E "Loaded Configuration|Scan this dir"
# Provjera pojedinačnih vrijednosti PHP-FPM-a
php-fpm8.3 -i | grep -E "^(expose_php|display_errors|session.upload_progress.enabled) "
```

Dodatno vrijednosti mogu stajati u FPM poolu, u Apache konfiguraciji, u `.htaccess` (samo mod_php) ili u `.user.ini` (FPM i CGI). Koja verzija zaista radi na poslužitelju i je li uključen backport, razjašnjava članak [Ispravna provjera verzije PHP-a i razine zakrpe](https://phpsos.de/hr/php2shell/php-version-pruefen/).

## Osnovne postavke za veću sigurnost php.ini

Sljedeće su vrijednosti smislene za većinu produkcijskih poslužitelja. Prije primjene u testnom okruženju provjerite snalazi li se Vaša aplikacija sa svim vrijednostima.

```ini
; Bez navođenja verzije u HTTP zaglavlju
expose_php = Off

; Pogreške zapisivati u log, ali ih nikad ne prikazivati u pregledniku
display_errors = Off
display_startup_errors = Off
log_errors = On
error_log = /var/log/php/error.log

; Ne uključivati datoteke s udaljenih adresa
allow_url_include = Off
; allow_url_fopen ostaviti aktivnim samo ako ga aplikacija treba
allow_url_fopen = Off

; Sesije: strogo, samo putem HTTPS-a, nečitljive putem JavaScripta
session.use_strict_mode = 1
session.use_only_cookies = 1
session.cookie_secure = 1
session.cookie_httponly = 1
session.cookie_samesite = Lax

; Ograničiti vrijeme izvršavanja i ulaze
max_execution_time = 30
max_input_time = 60
max_input_vars = 1000
```

`allow_url_fopen` neke aplikacije trebaju za ažuriranja ili sučelja. Isključite ga samo ako ste to prethodno provjerili. Funkcije koje izvršavaju sistemske naredbe mogu se dodatno zabraniti; kako to uspijeva bez nuspojava, objašnjava vodič [Ispravna uporaba disable_functions](https://phpsos.de/hr/ratgeber/disable-functions/).

## Privremene mjere php.neta za PHP2Shell

Ako ne možete odmah zakrpati, php.net navodi nekoliko postavki koje smanjuju rizik. One izričito nisu potpuna zaštita, nego most do ažuriranja.

```ini
; Isključiti Session Upload Progress (i zbog CVE-2026-115560)
session.upload_progress.enabled = 0

; Ograničiti veličinu zahtjeva: 8M bez uploada, 32M s uploadima
post_max_size = 8M
upload_max_filesize = 6M

; Samo PHP 8.5: bez backtraceova kod teških pogrešaka
fatal_error_backtraces = 0
```

Uz to php.net preporučuje postaviti `memory_limit=-1` tako da ga aplikacije ne mogu prepisati, a granicu memorije umjesto toga povući putem kontejnera ili cgroupa, a ne putem `RLIMIT_AS` ili `RLIMIT_DATA`. Ta mjera pripada u FPM pool ili konfiguraciju poslužitelja i treba je kombinirati s funkcionalnom cgroup granicom. Potpuni pregled nalazi se na stranici [Hitne mjere ako još ne možete zakrpati](https://phpsos.de/hr/php2shell/sofortmassnahmen-ohne-patch/).

> **Važno:**
> `session.upload_progress.enabled=0` djeluje samo iz php.ini, FPM poola ili konfiguracije poslužitelja. Postavljena putem `ini_set()` ili `.user.ini`, mjera ne djeluje. Zatim ponovno pokrenite sve workere.

## Zaključavanje vrijednosti protiv prepisivanja

Mnoge aplikacije postavljaju vlastite vrijednosti, primjerice za memoriju ili uploade. Uz `php_admin_value` i `php_admin_flag` postavke određujete tako da ih ne mogu promijeniti ni `ini_set()` ni `.user.ini`. U FPM poolu to izgleda ovako:

```ini
; /etc/php/8.3/fpm/pool.d/meine-seite.conf (izvadak)
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
```

Na Apacheu s mod_php vrijedi ista logika s `php_admin_value` i `php_admin_flag` u konfiguraciji VirtualHosta. Zatim ponovno učitajte servis i provjerite aktivnu vrijednost:

```bash
sudo systemctl reload php8.3-fpm
# Vrijeme pokretanja procesa: je li nakon promjene?
ps -eo pid,lstart,cmd | grep "[p]hp-fpm"
```

Reload ponovno pokreće workere PHP-FPM-a. Nakon PHP ažuriranja, međutim, potrebno je potpuno ponovno pokretanje svih PHP procesa kako nijedan stari proces ne bi radio dalje u memoriji. Kod više web-stranica na jednom poslužitelju isplati se i zaseban pool po web-stranici, više u vodiču [open_basedir i izolacija po web-stranici](https://phpsos.de/hr/ratgeber/open-basedir/).

## Česte pogreške i kratki popis za provjeru

Većina problema s php.ini ne nastaje zbog pogrešnih vrijednosti, nego zbog vrijednosti na pogrešnom mjestu. Tipično je promijenjena CLI datoteka dok web-stranica radi preko PHP-FPM-a. Jednako često nakon promjene izostane ponovno pokretanje ili hosting panel pri sljedećem spremanju prepiše Vašu postavku.

Drugi klasik su vidljive poruke o pogreškama na produkcijskoj web-stranici. One odaju putanje, nazive baza podataka ili verzije i napadačima olakšavaju orijentaciju. Upravo nakon selidbe ili nove instalacije `display_errors` često opet stoji na `On`.

Ove točke provjerite nakon svake promjene i nakon svakog PHP ažuriranja:

1. Koju konfiguracijsku datoteku čita web način rada i sadrži li ona Vaše vrijednosti?
2. Jesu li `display_errors` i `expose_php` isključeni, može li se u log pogrešaka pisati?
3. Stoji li `session.upload_progress.enabled` na `0`, postavljen putem php.ini ili poola?
4. Jesu li veličine uploada i zahtjeva ograničene u skladu s aplikacijom?
5. Rade li svi PHP procesi s vremenom pokretanja nakon zadnje promjene?

Rezultat zabilježite s datumom. Tako se kasnije može dokazati koja je postavka kada vrijedila.

## Kako PHP SOS konkretno pomaže?

- Utvrđujemo koja je konfiguracija u kojem načinu rada zaista aktivna.
- Provodimo usklađenu osnovnu konfiguraciju i PHP2Shell privremene mjere, testirane s Vašom aplikacijom.
- Sigurnosno relevantne vrijednosti zaključavamo protiv prepisivanja i kontrolirano ponovno pokrećemo sve workere.
- Postavke i rezultat provjere dokumentiramo kako bi kasnije promjene ostale sljedive.

Kako izgleda trajna zaštita, opisuje usluga [Ojačavanje poslužitelja za PHP web-poslužitelje](https://phpsos.de/hr/leistungen/server-haertung/).


## Česta pitanja

**Koju php.ini zapravo koristi moj web-poslužitelj?**  
To često nije ista kao u naredbenom retku. PHP-FPM, Apache s mod_php i CLI obično imaju vlastite konfiguracijske mape. Aktivnu datoteku stoga provjerite putem odgovarajućeg načina rada, primjerice s php-fpm -i ili kratkotrajno postavljenom datotekom za provjeru.

**Zamjenjuje li sigurna php.ini PHP ažuriranje?**  
Ne. Postavke smanjuju površinu napada i otežavaju iskorištavanje, ali ne zatvaraju ranjivost u PHP interpreteru. Ni privremene mjere php.neta za PHP2Shell izričito nisu potpuna zaštita.

**Koja je razlika između php_value i php_admin_value?**  
Vrijednosti postavljene s php_value aplikacija može tijekom rada ponovno promijeniti. Vrijednosti putem php_admin_value u FPM poolu ili u Apache konfiguraciji, međutim, za aplikaciju su zaključane, i za ini_set() i za .user.ini.

**Moram li nakon promjene u php.ini ponovno pokrenuti?**  
Da. PHP-FPM i Apache s mod_php čitaju konfiguraciju samo pri pokretanju. Nove vrijednosti vrijede tek nakon ponovnog pokretanja ili reloada svih pogođenih servisa.

## Izvori

- [php.net: sigurnosne objave](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 (njemački standard)](https://www.bsi.bund.de/DE/Themen/Unternehmen-und-Organisationen/Standards-und-Zertifizierung/IT-Grundschutz/it-grundschutz_node.html)
