L'inclusione di file e' un punto delicato in uno script, e' facile creare buchi di sicurezza se non si fa attenzione. Il modo migliore per evitare problemi e' che sia lo sviluppatore a scrivere direttamente quali sono i file accettabili, cosi' si e' sicuri che nulla di imprevisto possa succedere. Quando questo non e' possibie, bisogna cercare di confinare il raggio d'azione dell'include il piu' possibile. Usando una directory fissa scritta direttamente nel codice e basename() in questo modo:
codice:
$directory = '/var/www/includes/';
$page = basename($_GET['page']);
include($directory . $page);
ti assicuri che possano essere inclusi solo file da quella specifica directory. Un approccio ancora migliore e' verificare che il nome del file sia valido e non contenga caratteri strani: ad esempio se usi solo caratteri alfanumerici e underscore puoi verificare con:
codice:
if (preg_match('#^[a-z0-9_.]+$#', $page)) {
// nome ok
} else {
// nome non ok
}
o ancora controllare l'estensione del file o qualunque altro controllo si addica alla situazione.