CitarPues antiguamente filtraba todo atraves de expresiones regulares pero se me ocurrió un método muchisimo mas efectivo y mas corto.
Fácil, córto, límpio, sencillo.... a mas de alguien le va a servir, saludos.
if(in_array(($mod= './modules/'.$_GET['module'],'/index.php'), glob('./modules/*/index.php'))){
include($mod);
}else{
echo 'El módulo no existe.';
}
Autor: WHK
Fuente: EHN
Es una forma muy buena, pero para los nuevos podrían seguir esto:
<?php
$path_contenedor = 'path/';
$archivo = $_GET['file'];
if(!@file_exists($path_contenedor.$archivo))
{
echo 'El archivo no existe';
}else{
require_once($path_contenedor.$archivo);
}
?>
También en tu ejemplo para que entiendan sería:
<?php
$path_contenedor = 'path/';
$archivo = $_GET['file'];
$archivos = array('archivo1.php', 'archivo2.php');
if(!in_array($archivo, $archivos))
{
echo 'El archivo no existe';
}else{
require_once($path_contenedor.$archivo);
}
?>
Por otro lado, si no quieres dejar expuesto que archivo incluyes puedes hacer algo así:
<?php
$archivo = $_GET['file']; //xt3mp.mx?file=usuarios
switch($archivo)
{
case 'usuarios':
require_once('users.php');
break;
case 'registro':
require_once('register.php');
break;
default;
echo 'El archivo no existe';
}
?>
Saludos.
La opción que posteo Sthefano02, el código que escribió WHK.
Sirve para evitar LFI pero es para un caso en especifico, el código al parecer es funciona para algún CMS pero no para todos porque ninguno tiene la misma estructura.
Yo usaria la ultima opción de Xt3mP, solo incluiría los archivos que deseo que se incluyan. Aunque el primer código de Xt3mP es vulnerable, me imagino que seria un ejemplo.
Saludos.
Así es, el primer código les permite navegar ya que no delimito la raíz de la carpeta (./) pero solo era para un ejemplo, gracias por la anotación.
Saludos.