Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Direttive sulla stampa degli errori

Le direttive che impediscono la visualizzazione sul browser degli errori di PHP: evitano la divulgazione di informazioni delicate
Le direttive che impediscono la visualizzazione sul browser degli errori di PHP: evitano la divulgazione di informazioni delicate
Link copiato negli appunti

display_errors

[Php.ini, .htaccess, apache2.conf ed ogni script utente]

Contrariamente a quanto è opportuno usare in fase di programmazione, in sede di produzione, ossia a programma ultimato e consegnato al cliente, PHP dev'esser il più taciturno possibile, praticamente un muto.

Spetta sempre al programmatore ogni controllo e gestione dell'errore di runtime, ponendo ovviamente per assodato che errori di sintassi non ve ne siano, quindi per qualsiasi impostazione si abbia nel file php.ini, l'utente non dovrebbe vedere mai alcun tipo di messaggio d'errore a video. Per questo usiamo:

display_errors = Off
display_startup_errors = Off

Stampare errori a video può significare rivelare la struttura interna del programma, vista come file e percorsi che vengono usati dagli script PHP, nonché la struttura del database sottostante.

Per i (pochi?) errori di runtime non previsti, nonché per ogni altra tipologia di errore o warning, è invece utilissimo affidarsi alla direttiva log_errors, con la quale si andrà sempre a tener traccia degli errori (quelli specificati in error_reporting), ma li si salverà in un file di log anziché inviarli al browser dell'utente, che come detto può risultare pericoloso nonché imbarazzante.

Ad esempio:

log_errors = On
error_reporting = E_ALL & ~E_NOTICE
log_errors_max_len = 4096
error_log = /var/log/php.err

Poniamo attenzione a che il file suddetto sia accessibile in lettura e scrittura dall'utente con cui gira PHP, meglio se l'utente ne è proprietario ed unico visualizzatore/scrittore.

Una riga di esempio del file:

[30-Sep-2006 06:36:20] PHP Fatal error:  Allowed memory size of 20971520 bytes exhausted (tried to allocate 4457872 bytes) in /var/www/xxx/yyy.lib.php on line 2427

Nel caso di questo errore, il programmatore (io...) non ha previsto un adeguato controllo, e l'applicazione si è "piantata". Ma per lo meno senza dare quest'orrido output all'utente.

register_globals

[Php.ini, .htaccess, apache2.conf]

Tale direttiva, se abilitata, permette allo script PHP di creare variabili globali secondo quanto ricevuto via query string, form, cookies o sessione. Per evitare che uno script mal programmato interpreti variabili in GET o POST come variabili globali, con conseguente pericolo di modificare il suo comportamento interno, è bene disabilitare questa voce, sempre e comunque.

Nel caso il programma Web non funzionasse, modificare il programma non la direttiva, e non fidarsi dello stesso, già ha sfigurato.

magic_quotes_gpc

[Php.ini, .htaccess, apache2.conf]

Tale direttiva equivale ad un addslashes automatico sui caratteri considerati "pericolosi" relativi a tutte le stringhe passate via GET e POST e su tutto quanto salvato nei cookies (gpc = GET POST cookies). La sua abilitazione o disabilitazione dipende dalla logica di programmazione: si veda la già citata guida per maggiori informazioni.

Nel dubbio abilitare la direttiva.

In luogo dei magic_quotes o dell'addslashes "manuale" per fare l'escape dei caratteri riservati è preferibile tuttavia utilizzare le funzioni apposite che PHP mette a disposizione. Nell'interazione con MySQL ad esempio è opportuno usare mysql_real_escape_string sulle variabili passate alle interrogazioni SQL.

allow_url_fopen

[Php.ini, apache2.conf]

Abilita i wrapper URL per fopen(), in modo da poter accedere agli oggetti URL (http://, ftp://) come semplici file locali. Nel caso l'applicazione Web non utilizzi la funzione fopen() o include() per accedere ad URL remoti, disabilitare la direttiva. In tale maniera è possibile scongiurare possibili exploit dovuti ad include dinamici remoti malevoli.

enable_dl

[Php.ini, apache2.conf]

La funzione dl() permette di caricare moduli aggiuntivi nel sistema, runtime, da script. In tal modo potrebbe esser caricato un modulo che modifichi il comportamento di Apache stesso, portando a superare le direttive del php.ini.

Si consiglia di usare quindi:

enable_dl = Off

in modo che gli unici moduli caricati siano quelli indicati in configurazione.

Ti consigliamo anche