Evitar LFI de forma fácil

Iniciado por Mavis, Julio 20, 2011, 02:39:35 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Julio 20, 2011, 02:39:35 AM Ultima modificación: Octubre 25, 2013, 11:43:39 PM por Expermicid
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.

Código: php
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:

Código: php

<?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:
Código: php

<?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í:

Código: php

<?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.
Cada vez que me das Karma me motivas

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.
Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.

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.
Cada vez que me das Karma me motivas