Il discorso riguardante il Safe Mode è abbastanza complesso, per chi non volesse addentrarsi troppo nell'argomento, diremo subito che esiste una semplice regola generale che consiglia di settare la direttiva corrispondente in On; lo stesso destino toccherà più o meno a tutte le altre direttive correlate a questa voce di cui parleremo tra poco.
Per render il concetto in modo semplice, diremo che la direttiva safe_mode è stata introdotta per risolvere le problematiche legate alla gestione dei permessi sulle risorse.
L'attivazione di questa direttiva comporta alcune limitazioni: innanzitutto l'interprete di PHP andrà a verificare ogni volta l'User ID del file che viene eseguito e simulerà l'utente corrispondente attuando un'azione detta wrapping.
In secondo luogo, le funzioni per la manipolazione dei file (come ad esempio copy() o unlink()) non potranno estendere la loro azione su risorse appartenenti a proprietari differenti da quello dell'applicazione che s'intende eseguire.
Terzo, i costrutti include() e require() risentiranno delle stesse limitazioni indicate per le precedenti funzioni tranne che per le risorse contenute nella directory indicata dalla direttiva safe_mode_include_dir.
Inoltre, le chiamate di sistema operate tramite le funzioni exec() (esegue un programma esterno), system() (esegue un programma esterno e ne mostra l'output) e passthru() (esegue un programma esterno e ne mostra l'output non elaborato, raw), non potranno coinvolgere eseguibili diversi da quelli inseriti nella cartella indicata dalla direttiva safe_mode_exec_dir.
Infine, non si potrannoi utilizzare: l'operatore backtick (``) omologo della funzione shell_exec() (esegue un comando tramite la Shell e restituisce un output completo sotto forma di stringa) anch'essa inutilizzabile; la funzione set_time_limit() (limita il tempo massimo in secondi di un'esecuzione); dl() (carica i moduli di PHP a runtime).
E' possibile rendere un pò meno drastiche le limitazioni dovute all'abilitazione della direttiva safe_mode agendo su un'altra voce del file di configurazione PHP.INI, abilitando cioè la voce safe_mode_gid; in questo modo i controlli sulle identità degli owner avvengono a carico del group di riferimento.
Attenzione: questo articolo è stato concesso in esclusiva per la pubblicazione a Mrwebmaster.it; ne è vietata la riproduzione,
anche parziale, senza l'esplicito consenso dell'autore e della redazione di Mrwebmaster.it.