Ver Mensaje Individual
  #4 (permalink)  
Antiguo 15/06/2010, 15:52
SDogo
 
Fecha de Ingreso: junio-2010
Mensajes: 1
Antigüedad: 13 años, 10 meses
Puntos: 0
Mensaje Respuesta: Es seguro o no recomendable mi sistema modular??

Cita:
Iniciado por winjose Ver Mensaje
Hola amigos, pues estoy haciendo una web modular, y bueno he googleado y he visto varios metodos como por ejemplo, utilizando switch, o mediante la utilizacion de includes. Mi sistema es el siguiente:
Código PHP:
<?php

/*
Mi web modular.
 */

//Configuración...
$carpeta 'secciones/'//Carpeta que contiene las secciones de nuestra web.


//Obtenemos la sección que el usuario está solicitando
$seccion = @$_GET['sec'];

//Si el usuario no ha solicitado ninguna sección en especial, eso significa que quiere ver la página principal de nuestra web, que será "home", así que le damos ese valor a la variable.
if (empty($seccion)){
    
$seccion 'home';
    }

//Acto seguido verificaremos que el archivo de sección que el usuario está solicitando exista en la carpeta que hemos definido en la variable $carpeta. Si éste existe, "incluimos" el contenido. De lo contrario, indicaremos que la sección no existe.

if (file_exists($carpeta $seccion '.php')){
    include(
$carpeta $seccion '.php');
    }else{
        echo 
'¡La sección no existe! Por favor <a href="' $_SERVER['PHP_SELF'] . '?sec=home">vuelva a la página principal.';
        }


?>
</div>
</body>
</html>
Y ahora bien; ¿Es un sistema fragil? me refiero a seguridad. ¿Me lo recomiendan, o quizás debiera utilizar otros metodos?

Gracias desde ya!! y un SALUDO!!
Disculpen si estoy reviviendo viejos temas, pero como he usado tu codigo me senti en deuda asi que te dejo un grave error que encontre y su solucion.

El error permite la ejecucion de codigo remoto e incluso dejar muerto el server en un loop infinito.

El problema reside en que no estas manejando la variable $sec para que no reciba slashes "/" por lo que puedes saltar de carpeta en carpeta por el servidor como quieras.

Como ejemplo tenemos la siguiente estructura de archivos

/
-Secciones
--seccion1.php
--seccion2.php
-index.php
-archivo_malicioso.php

Dado que como directorio inicial es sistema usaria "Secciones" solo deberiamos retroceder un nivel para enlazar a "archivo_malicioso.php". En el funcionamiento normal tendremos urls del tipo:

www.direccion.algo/index.php?sec=seccion1

Pero se usamos la direccion

www.direccio.algo/index.php?sec=../archivo_malicioso

Ejecutariamos el archivo maldito. Tambien si en vez de usar la url anterior usamos esta:

www.direccio.algo/index.php?sec=../index

El sistema caeria en un bucle sin fin ya que cada vez que llama a index este a su vez llama de nuevo a index y asi sucesivamente.

La solucion es tan simple como usar la funcion explode (provisorio ya que no se si sirve contra urls codificadas). La funcion la usariamos de la siguiente forma:

Código PHP:
<?php
    $antipath
=explode ("/",$seccion);
    
$seccion=$antipath[0];
    
//echo $seccion; //Una pequeña comprobacion en tiempo de programacion para ver si realmente funciona.
?>
Quedando como codigo final:

Código PHP:
<?php
    
//Configuración...
    
$carpeta 'Secciones/'//Carpeta que contiene las secciones de nuestra web.
    //Obtenemos la sección que el usuario está solicitando
    
$seccion = @$_GET['sec'];
    
//Si el usuario no ha solicitado ninguna sección en especial, eso significa que quiere ver la página principal de nuestra web, que será "home", así que le damos ese valor a la variable.
    
if (empty($seccion)){
        
$seccion 'Inicio';
    }
    
//Acto seguido verificaremos que el archivo de sección que el usuario está solicitando exista en la carpeta que hemos definido en la variable $carpeta. Si éste existe, "incluimos" el contenido. De lo contrario, indicaremos que la sección no existe. Y tambien una pequeña validacion para evitar ejecuciones no autorizadas.
    
$antipath=explode ("/",$seccion);
    
$seccion=$antipath[0];
    
//echo $seccion; //Una pequeña comprobacion en tiempo de programacion para ver si realmente funciona.
    
if (file_exists($carpeta $seccion '.php')){
        include(
$carpeta $seccion '.php');
    }
    else{
        echo 
'¡La sección no existe! Por favor <a href="' $_SERVER['PHP_SELF'] . '?sec=Inicio">vuelva a la página principal.';
    }
?>
Con esto cualquier intento de usar / queda invalidado y mandaria el mensaje que no existe la seccion. Tambien se pueden agregar mas filtros, para eso se puede consultar la ayuda del comando explode.