Sitwazzjoni attwali: PHP2Shell. Żewġ vulnerabbiltajiet kritiċi ta' PHP (CVSS 9,2) jippermettu kodiċi malizzjuż mingħajr login. Patches mill-21/10/2026.X'għandu jsir issa →

display_errors off: itfi l-output tal-iżbalji fil-produzzjoni

Messaġġi viżibbli ta' żball ta' PHP jiżvelaw mogħdijiet, ismijiet ta' databases u verżjonijiet. Hekk titfihom f'PHP, fil-framework u fis-server tal-web, mingħajr ma titlef mill-għajn l-iżbalji.

Stat 6 min. qariTisħiħ u konfigurazzjoni

Fil-qosor: Fuq websajt live display_errors = Off jappartjeni fil-php.ini, flimkien ma' display_startup_errors = Off, log_errors = On u log tal-iżbalji barra mill-webroot. Barra minn hekk is-CMS u l-frameworks iridu jaħdmu fil-modalità tal-produzzjoni, inkella l-paġni ta' żball proprji tagħhom juru d-dettalji. Imblukkati b'php_admin_flag u vverifikati wara kull aġġornament, l-iżbalji jibqgħu fil-log minflok fil-browser.

X'jiżvela messaġġ wieħed ta' żball

Twissija fin-naħa ta' fuq tal-paġna, „Fatal error” minflok is-sommarju tal-ordni: output bħal dan jidher bla ħsara. Għal attakkant huwa mappa. Juri mogħdijiet sħaħ ta' fajls, ismijiet ta' databases u tabelli, libreriji użati u ħafna drabi l-verżjoni ta' PHP.

Eżattament f'sitwazzjonijiet bħal PHP2Shell, fejn ikun għaddej tiftix massiv għal servers vulnerabbli, server għandu jiżvela kemm jista' jkun inqas dwar nnifsu. Dan ma jagħlaqx vulnerabbiltà fl-interpretatur ta' PHP, imma jagħmel kull pass ulterjuri wara dħul aktar diffiċli u jagħmel attakki immirati fuq l-applikazzjoni tiegħek aktar tqal.

Hemm ukoll il-protezzjoni tad-data. Messaġġi ta' żball jistgħu jkun fihom partijiet minn talbiet, pereżempju indirizzi tal-email minn formoli. Dak li jidher fil-browser ta' viżitatur m'huwiex aktar taħt il-kontroll tiegħek.

Il-valuri standard mhumiex maħsuba għall-produzzjoni

Ħafna jassumu li PHP jaħbi l-iżbalji waħdu. Il-manwal ta' PHP jgħid xi ħaġa oħra: il-valur standard integrat ta' display_errors huwa 1, u display_startup_errors minn PHP 8.0 huwa wkoll mixgħul b'mod standard. Biss il-mudell mogħti php.ini-production jissettja t-tnejn fuq Off. Il-manwal isejjaħ display_errors espliċitament funzjoni tal-iżvilupp li qatt m'għandha tintuża fuq sistemi fuq l-internet.

Jekk is-server tiegħek juża l-mudell tal-produzzjoni, mhuwiex ovvju. Images tal-containers kultant jibdew mingħajr php.ini, panels tal-hosting jissettjaw valuri proprji, u wara trasferiment spiss jiġi kkupjat il-mudell tal-iżvilupp.

display_errors off: l-issettjar b'ħarsa ġenerali

Il-valuri li ġejjin huma sensibbli għal servers tal-produzzjoni. Il-kostanti bħal E_ALL jaħdmu biss fil-php.ini; fil-konfigurazzjoni ta' Apache, skont il-manwal ta' PHP, m'għandhom l-ebda tifsira u jridu jingħataw bħala numru.

Issettjar Produzzjoni Skop
display_errors Off l-ebda żbalji fil-browser
display_startup_errors Off l-ebda żbalji fl-output mal-bidu ta' PHP
log_errors On ikteb l-iżbalji fil-protokoll
error_log mogħdija barra mill-webroot fajl tal-log proprju għal kull websajt jew pool
error_reporting E_ALL irreġistra l-iżbalji kollha, ma turix
html_errors Off test sempliċi minflok HTML fil-protokolli
zend.exception_ignore_args On l-ebda argumenti ta' funzjoni fl-stacktraces
fatal_error_backtraces 0 sal-aġġornament (biss PHP 8.5) miżura tranżitorja skont php.net

zend.exception_ignore_args huwa partikolarment prezzjuż. Mingħajr dan l-issettjar, stacktraces fil-logs u fuq paġni ta' żball jistgħu jkun fihom l-argumenti ta' sejħiet ta' funzjonijiet, jiġifieri anke passwords jew tokens li kienu għadhom qed jiġu pproċessati.

; php.ini tas-SAPI tal-web
display_errors = Off
display_startup_errors = Off
log_errors = On
error_log = /var/log/php/website-fehler.log
error_reporting = E_ALL
html_errors = Off
zend.exception_ignore_args = On
; biss PHP 8.5, miżura tranżitorja sal-aġġornament għal 8.5.12:
; fatal_error_backtraces = 0

Fil-pool FPM ibblokka addizzjonalment il-valuri l-aktar importanti, biex l-ebda applikazzjoni ma terġa' tixgħelhom b'ini_set():

; pereżempju /etc/php/8.3/fpm/pool.d/seite1.conf
php_admin_flag[display_errors] = off
php_admin_flag[display_startup_errors] = off
php_admin_flag[log_errors] = on
php_admin_value[error_log] = /var/log/php/seite1-fehler.log

Wara erġa' ibda s-servizz rispettiv ta' PHP. Kif jaħdem eżattament il-blokk jispjegah l-artikolu php_admin_value: ibblokka l-issettjar kontra sostituzzjoni. Konfigurazzjoni bażika kompluta ssibha taħt Ikkonfigura php.ini b'mod sigur.

It-tieni switch: il-modalità debug tal-applikazzjoni

PHP huwa biss nofs il-paga. Frameworks moderni jaqbdu l-iżbalji stess u juru paġni ta' żball proprji, ħafna drabi dettaljati ħafna. Fil-modalità debug fihom siltiet tal-kodiċi sors, valuri ta' konfigurazzjoni u kultant varjabbli tal-ambjent. Dawn il-paġni jidhru wkoll meta display_errors f'PHP ikun mitfi.

Għalhekk ivverifika għal kull applikazzjoni l-switch proprju. F'WordPress dawn huma WP_DEBUG u WP_DEBUG_DISPLAY fil-wp-config.php, f'Laravel u Symfony APP_DEBUG u l-ambjent fil-fajl .env, f'sistemi oħra l-modalità tal-produzzjoni skont id-dokumentazzjoni tal-manifattur. Fuq sistema live l-modalità debug tappartjeni mitfija b'mod permanenti, anke „biss għal ftit biex nittestjaw” hija riskju.

Kif l-iżbalji jiġu ttrattati sew fl-applikazzjoni, minflok ma jiġu mrażżna, tiddeskrivih Żbalji u exceptions f'PHP.

Hekk issib output ta' żbalji qabel ma jsibuh l-oħrajn

Li tissettja darba ma jkunx biżżejjed. L-output ta' żbalji jirritorna wara aġġornamenti, trasferimenti jew bidliet fil-panel. Proċess qasir ta' verifika jgħin:

  1. Ivverifika l-valuri effettivi fil-kuntest tal-web, mhux biss fuq il-linja tal-kmand, pereżempju b'fajl ta' verifika poġġut għal ftit u mneħħi minnufih.
  2. Ikkontrolla l-modalità debug ta' kull applikazzjoni fil-fajl ta' konfigurazzjoni tagħha.
  3. Fittex fil-paġni mwassla testi tipiċi ta' żbalji, kif fil-blokk tal-kodiċi hawn taħt.
  4. Fil-magna tat-tiftix, b'query site: fuq id-dominju tiegħek, fittex termini bħal „Fatal error” jew „Warning”.
  5. Ivverifika li l-log tal-iżbalji jinkiteb u mhux fil-webroot.
# Fittex fil-paġni mwassla testi ta' żbalji ta' PHP (biss id-dominji tiegħek)
for url in https://www.example.de/ https://www.example.de/kontakt/; do
  curl -s "$url" | grep -E -o "(Fatal error|Warning|Notice|Deprecated|Stack trace)[^<]{0,80}" | head -3
done
# Il-log tal-iżbalji jinkiteb?
ls -l /var/log/php/
Importanti

Li taħbi l-iżbalji mhuwiex sostitut biex issewwihom. Log mimli twissijiet huwa sinjal ta' bżonn ta' manutenzjoni, u wara dħul spiss huwa traċċa importanti. X'tirreġistra u x'ma tirreġistrax jiddeskrivih Irreġistra b'mod sigur: iżbalji mingħajr tnixxija ta' data.

Konklużjoni: kwiet fil-browser, ċajtier fil-log

Ir-regola għal servers tal-produzzjoni hija sempliċi: l-iżbalji jappartjenu fil-protokoll, mhux fuq il-websajt. Fil-prattika tfalli minħabba valuri standard li mhumiex maħsuba għall-produzzjoni, switches tad-debug fl-applikazzjonijiet u konfigurazzjonijiet li jirritornaw wara aġġornamenti jew trasferimenti.

Min jitfi display_errors u display_startup_errors, jibblokka l-valuri fil-pool, jikkontrolla l-modalità debug tal-applikazzjoni u jivverifika r-riżultat regolarment jagħlaq waħda mill-aktar sorsi komuni ta' żvelar bla bżonn ta' informazzjoni. L-isforz huwa żgħir, l-effett idum sakemm il-verifika tibqa' parti minn kull aġġornament.

Punt wieħed m'għandux jinsa: il-log tal-iżbalji mhuwiex borma tal-iskart. Min jaqrah regolarment jagħraf aġġornamenti difettużi, funzjonijiet skaduti u kultant ukoll l-ewwel traċċi ta' attakk, ħafna qabel ma l-klijenti jinnotaw xi ħaġa.

Kif tgħin PHP SOS b'mod konkret?

  • Nivverifikaw: naqraw l-issettjar effettiv tal-iżbalji għal kull websajt u pool u nfittxu fil-paġni mwassla output ta' żbalji.
  • Nbiddlu: nissettjaw l-issettjar ta' PHP u tal-applikazzjoni għall-operat tal-produzzjoni u nibblokkawh kontra sostituzzjoni.
  • Nistabbilixxu l-protokolli: il-logs tal-iżbalji jinsabu barra mill-webroot, jiġu rrotati u huma aċċessibbli għall-iżviluppaturi tiegħek.
  • Nżommuh permanenti: fil-Kuntratt ta' manutenzjoni tas-sigurtà nivverifikaw l-issettjar mill-ġdid wara kull aġġornament.

Mistoqsijiet frekwenti

display_errors f'PHP mhuwiex diġà mitfi xorta waħda?

Mhux awtomatikament. Skont il-manwal ta' PHP, il-valur standard integrat ta' display_errors huwa 1. Biss il-mudell mogħti php.ini-production jissettja Off. Jekk is-server tiegħek juża dan il-mudell jiddependi mid-distribuzzjoni, mill-panel jew mill-image tal-container u għandu jiġi vverifikat.

display_errors = Off huwa biżżejjed jekk WordPress jew Laravel jaħdmu fil-modalità debug?

Le. Ħafna CMS u frameworks għandhom paġni ta' żball proprji li jistgħu juru dettalji indipendentement minn PHP. Għalhekk itfi wkoll il-modalità debug tal-applikazzjoni, pereżempju WP_DEBUG_DISPLAY f'WordPress jew APP_DEBUG f'Laravel u Symfony.

Fejn imorru l-iżbalji meta ma jidhrux aktar?

B'log_errors = On, PHP jiktibhom fil-fajl imsemmi minn error_log, jew fil-protokoll tal-modalità tat-tħaddim rispettiva, pereżempju l-log tal-iżbalji ta' Apache jew PHP-FPM. Il-fajl għandu jkun barra mill-webroot u jiġi rrotat regolarment.

X'għandu x'jaqsam fatal_error_backtraces ma' PHP2Shell?

L-issettjar jeżisti minn PHP 8.5 u huwa attiv b'mod standard. php.net isemmi fatal_error_backtraces=0 bir-restart wara bħala waħda mill-miżuri tranżitorji għal PHP 8.5, sakemm l-aġġornament għal 8.5.12 għadu pendenti. Ma jissostitwixxix l-aġġornament.

Sorsi

Kuntatt immedjat

Kull siegħa tgħodd. Iktbu lilna issa.

Iddeskrivu fil-qosor is-sistema, il-verżjoni ta' PHP u dak li osservajtu. Nikkuntattjawkom, niċċaraw is-sitwazzjoni u naħdmu mill-bogħod sakemm l-inċident jingħalaq u jiġi ddokumentat.

Għajnuna immedjata