Cominciamo l'esame delle direttive del file php.ini esaminando le prime che ci possono garantire una configurazione più sicura del nostro motore di scripting.
open_basedir
[Php.ini
e apache2.conf]
Limita tutte le operazioni sul filesystem ad opera di PHP all'interno degli alberi di directory che hanno per padri le directory selezionate. Se l'applicazione Web non ha necessità di accedere altrove, è una buona idea impostarla, soprattutto in caso di esistenza di più applicazioni Web sullo stesso server.
Non dovrebbe, in ogni modo, esser compito di PHP limitare l'utilizzo del filesystem per alcune sue function, bensì compito del sistema operativo: non illudersi di esser al sicuro solo per aver configurato questa direttiva, nel passato sono stati usati metodi per inficiarne l'utilità.
Esempio: open_basedir = /var/www/myapp:/tmp
disable_functions
[Solo php.ini]
Consente di disabilitare le funzioni PHP (non) desiderate. Un po' insensato: solitamente si nega tutto il possibile per abilitare solo in seguito quanto strettamente necessario. Inoltre, devo elencare qualche centinaio di funzioni qui di seguito? Ed ogni volta che viene introdotta una nuova function metter mano al php.ini?
Esempio: disable_functions readfile,exec
expose_php
[Solo php.ini]
Se questa direttiva viene abilitata, PHP darà traccia di sé nelle intestazioni (header) HTTP inviate dal server al client in risposta alla richiesta di ogni pagina (risorsa) oppure, in altre circostanze (quali errori inerenti la mancanza della risorsa richiesta ad esempio), anche nella pagina HTML di risposta stessa. Vediamo alcuni esempi.
Informazioni inviate da Apache quali header HTTP durante la risposta alla richiesta di una pagina. Queste informazioni sono di norma nascoste all'utente finale ad opera del browser.
Se la direttiva è ad On:
HTTP/1.1 200 OK Date: Mon, 16 Oct 2006 15:23:13 GMT Server: Apache/2.0.55 (Debian) PHP/5.1.6-1 mod_ssl/2.0.55 OpenSSL/0.9.8c X-Powered-By: PHP/5.1.6-1
Se ad Off:
HTTP/1.1 200 OK Date: Mon, 16 Oct 2006 15:25:50 GMT Server: Apache/2.0.55 (Debian) mod_ssl/2.0.55 OpenSSL/0.9.8c
Informazioni inviate (sia tramite header HTTP che) nella pagina di risposta, quindi visibili anche all'utente finale inesperto a fronte di una richiesta non soddisfatta (codice di errore HTTP 404).
Se la direttiva è ad On:
The requested URL /pagina was not found on this server. Apache/2.0.55 (Debian) PHP/5.1.6-1 mod_ssl/2.0.55 OpenSSL/0.9.8c Server at <IP> Port 443
Se la direttiva è ad Off:
The requested URL /pagina was not found on this server. Apache/2.0.55 (Debian) mod_ssl/2.0.55 OpenSSL/0.9.8c Server at <IP> Port 443
Queste informazioni possono rivelarsi utilissime per un cracker o per chiunque conosca le vulnerabilità note della precisa release dell'interprete in uso.
Assieme al corretto aggiornamento delle release di PHP, impostare questa direttiva ad Off
aiuta nell'evitare di incorrere in exploit dovuti alla tecnologia usata.
Impostare quindi: expose_php = Off
.