Trenutno stanje: PHP2Shell. Dvije kritične PHP ranjivosti (CVSS 9.2) omogućuju zlonamjerni kod bez prijave. Zakrpe od 21. 10. 2026.Što sada učiniti →

Sigurna konfiguracija php.ini

Koje postavke u php.ini smanjuju površinu napada, kako ih zaštititi od prepisivanja i što nakon PHP2Shella vrijedi dodatno.

Stanje 5 min čitanjaSavjetnik

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.

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

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.

; 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.

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.

; 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.

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:

; /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:

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.

Č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.

Č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

Hitni kontakt

Svaki sat se računa. Pišite nam odmah.

Ukratko opišite sustav, verziju PHP-a i opažanje. Javit ćemo Vam se, razjasniti situaciju i raditi na daljinu dok incident nije zaključen i dokumentiran.

Hitna pomoć