Originariamente inviato da andr3a
riga 1
Il tag di PHP non si apre con il solo <? ma si apre per esteso, ovvero con <?php poichè sebbene le vecchie versioni ti permettano di usare la "scorciatoia" se metti i tuoi scripts su un server aggiornato con le ultime versioni questi non verranno nemmeno interpretati.
Errore non troppo insignificante dato che da un giorno all'altro, dopo un update del server, potresti ritrovarti le pagine in chiaro con tanto di password del db, codice o altro o anche non interpretate quindi fantasma.
riga 2
Un codice è definibile almeno decente se non mostra errori e se verifica che le variabili utilizzate siano presenti. E' purtroppo frequente assegnare variabili, per lo più di input, senza verificarne ne l'esistenza ne il contenuto e non a caso ho scritto un
3d sull'argomento con tanto di funzione.
Quindi nel tuo caso il modo corretto sarebbe stato almeno verificare l'esistenza della variabile, dato che poi la usi anche per inclusioni.
codice:
if(isset($_GET['lan'])) {
$lan = $_GET['lan'];
// il resto ...
}
altrimenti lo script tenta un inclusione senza nemmeno sforzarsi di scrivere qualunque cosa nella variabile lan.
Errore anche questo frequente ma in questo caso molto grave, dato che la variabile serve a fare un'inclusione dinamica, operazione tanto "comoda" quanto spesso derisa dagli altri linguaggi di programmazione per via della semplicità con la quale si possono aggiungere falle al sistema ... ed infatti ...
riga 3
include("lan/".$lan.".php");
Riassumendo, non controlli che la variabile $_GET['lan'] sia stata inviata, la riassegni anche se non presente ad un'altra variabile giusto per creare un duplicato di una stringa o del nulla per poi usare questo duplicato per includere una pagina senza effettuare alcun controllo sulla stessa. Ergo questa linea di codice permette a chiunque di fare inclusioni multiple di qualunque pagina del tuo host senza che il PHP, poveraccio, possa far niente.
URL: index.php?lan=../index
si trasformerà in ...
include("lan/../index.php");
con l'inclusione rielaborata che troverà sempre la variabile lan e la index da reincludere ... un paio di chiamate in più e ben venuto overflow.
Cordiali saluti