SoloCodigo

Programación Web y Scripting => PHP => Mensaje iniciado por: ladlo en Jueves 3 de Noviembre de 2005, 20:38

Título: Seguridad Del Paso De Variables Por Url
Publicado por: ladlo en Jueves 3 de Noviembre de 2005, 20:38
Hola a todos.

Hace poco que he empezado a programar en PHP, y por ahora todo marcha sobre ruedas, pero tengo una duda.

Segun leo en http://es.php.net/manual/es/security.globals.php (http://es.php.net/manual/es/security.globals.php) se recomienda dejar register_globals en OFF para evitar potenciales peligros como que el usuario defina variables (ponen un ejemplo con un sistema de autentificacion).
Yo tengo el register_global en OFF y accedo a las variables de URL a traves de $_GET, segun se recomienda ahora, pero aun asi puedo introduci una URL asignando manualmente el valor de una (o mas) varables. Llevado al caso que ponen de ejemplo en el manual de PHP quiere decir que podria "autentificarme" a mano alterando la variable:

www.dominio.com/pagina.php?autorizado=true (http://www.dominio.com/pagina.php?autorizado=true)      por ejemplo

¿Es esto normal?. La prueba la he hecho con el navegador desde el servidor que me he montado (PHP v5.05 sobre windows, instalado como modulo de un Apache 1.33).

Si eto es normal, ¿como puedo pasar parametros entre dos scripts por URL sin que queden expuestos?, o ¿hay alguna manera de evitar que el usuario pueda modificar los parametros URL?. El contexto del problema es que desde la pagina A quiero pasar parametros a travesde un link a una pagina B (que realiza cierta consulta). No puedo ponerlo como una variable de sesion a no ser qyue consiga de alguna manera discriminar en que link de la pagina A clickeo el usuario...

En fin, un pequeño lio.
Título: Re: Seguridad Del Paso De Variables Por Url
Publicado por: LeGatoRojo en Sábado 5 de Noviembre de 2005, 08:25
puedes modificarlos, en vez de pasar algo obvio, manda algo dificil de decifrar. por que de otra manera tendran que ser con post, o por lo menos eso conozco yo,ahhh y tambien puedes usar sesiones en vez de paso de parametros-.
Título: Re: Seguridad Del Paso De Variables Por Url
Publicado por: ladlo en Domingo 6 de Noviembre de 2005, 10:38
Gracias por el consejo Darktigerhell, lo tendre que cifrandolos. Ya he visto que lo que ocurria es que habia entendido mal el manual de PHP y que es que los parametros URL siempre se pueden modificar a mano aunque register_globals este a OFF :_D
Título: Re: Seguridad Del Paso De Variables Por Url
Publicado por: Altareum en Lunes 7 de Noviembre de 2005, 21:58
A ver... hay un error de conceptos....

Cuando tienes habilitados register globals, produce que, al pasar una variable por GET, por ejemplo que tengamos www.miweb.com?aut=yes (http://www.miweb.com?aut=yes), PHP generara la variable $aut cuyo contenido será 'yes'. Pero si pasamos por un formulario una input, por ejemplo:
<input name="aut" ...  value="yes">
Esto, tambien generará en php una variable $aut y cuyo contenido será 'yes'. Y si mal no recuerdo, pasa lo mismo con las sesiones.


Por lo tanto el usuario puede facilmente falsear información, enviando por GET el valor de "aut" que debía recibirse por POST.

Para esto, se usa Register Globals en OFF, con lo cual el valor enviado estará en un array $_POST, $_GET, $_SESSION , etc... De esta forma $_POST['aut'] será distinto de $_GET['aut'].


Lo único que no se puede falsear (o al menos es extremadamente dificil) es la información almacenada en una sesión. Las variables enviadas por POST, se pueden falsear con algún, aunque no es muy fácil (en realidad, dependiendo de la seguridad de tu web). Las cookies son algo complicadas de falsear para un usuario normal y GET es la más fácil de todas.

Una forma algo segura es chequear el valor de $_SERVER['HTTP_REFERER']. Esto debe devolverte la dirección de la página que llamó al archivo en que se está ejecutando el script.

Altareum.