La mitigazione presentata è assolutamente insufficiente. Non è solo possibile includere qualsiasi file dalla directory corrente ma anche da qualsiasi directory a seconda del file system (cioè, \..
funziona ancora su Windows) o utilizzando un percorso assoluto (ad esempio /…
su sistemi Unix-like , o \…
su Windows) anche con diversi protocolli / wrapper (ad esempio, http://…
, file://…
, ftp://…
, ecc.), consentendo l'esecuzione di codice PHP arbitrario.
Se non vuoi questo, devi convalidare il valore del parametro. Ad esempio, se si desidera solo consentire determinati valori, utilizzare una matrice e verificare se il valore indicato è in esso:
$validValues = array();
if (!in_array($page, $validValues, true)) {
die("invalid 'page' value");
}
Se si desidera consentire qualsiasi file all'interno di una determinata directory, è possibile verificare se il percorso assoluto risultante sta ancora puntando a un file all'interno di tale directory utilizzando la tecnica descritta in Prevenire l'attraversamento di directory in PHP ma consentendo percorsi .