Detener el ataque
Para detener este tipo de ataques, el programador debe filtrar correctamente la variable ejemplo:
<?
if ($url=="seccion")
include ($url.".php");
?>
ó
<?
include ("./".$url.".php");
?>
Este último puede provocar un tipo de fallo llamado Local File Inclusion si $url toma un valor de tipo ../../../etc/passwd%00.
El Local File Inclusion podría inclusive permitir la ejecución de comandos al insertar código malicioso a través de
LOG's por ejemplo al incluirlos.
ó
<?
switch($url) {
case 0:include ("./contenidos/estapagina.php"); break;
case 1:include ("./contenidos/estaotra.php"); break;
default: include("./contenidos/error.php"); break;
}
?>
ó
<?
$url = intval($_GET['url']); //$url solo contendrá un valor entero.
$pagina = "./contenidos/cont".$url.".php";
if (file_exists($pagina))
include($pagina);
?>
Otra Solución
Otra solución más avanzada es aplicar una validación de la variable enviada como parámetro, descartando la inclusión de archivos remotos no deseados.
<?
$url = str_replace(array(':', '.', '/', '\\'), '', $url);
include_once($url);
?>