Foros del Web » Programando para Internet » PHP »

Evitar que en la URL aparezca la variable

Estas en el tema de Evitar que en la URL aparezca la variable en el foro de PHP en Foros del Web. Buenas, Tengo una pagina de entrada con un formulario. El típico user y pass. Lo tengo hecho de tal forma que cuando los valido devuelvo ...
  #1 (permalink)  
Antiguo 12/10/2008, 08:31
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 2 meses
Puntos: 20
Evitar que en la URL aparezca la variable

Buenas,

Tengo una pagina de entrada con un formulario. El típico user y pass.

Lo tengo hecho de tal forma que cuando los valido devuelvo un numero vía GET

En el script php que compruebo los datos del login contra la BD hay

Código:
Header ("Location: $redir?error_login=3"); //password incorrecto
etc...

Entonces en la pagina del login tengo puesto

Código:
include ("includes/aut_mensaje_error.inc.php"); // en este fichero estan los codigos de errores personalizados
			if (isset($_GET['error_login'])){
				$error=$_GET['error_login'];
Pero he visto que si lo dejo de esta manera, el usuario puede ir cambiando el valor de la URL e ir viendo todos los mensajes de errores...

http://localhost/entrada_login.php?error_login=8

Entonces me pregunto como puedo evitar esto? con la función de reescribir la URL? desde .htacces?? alguna sugerencia?

Gracias
  #2 (permalink)  
Antiguo 12/10/2008, 08:35
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: Evitar que en la URL aparezca la variable

Si lo recoges con un GET siempre será visible el número, lo puedes llegar a camuflar un poco.

Puedes mandarlos con el método POST y la variable ya no se verá en la URL, pero tampoco es muy dificil llegar a adivinarlo.

Quizás lo más seguro y "secreto" sería mandar el dato como variable de una sesión.
  #3 (permalink)  
Antiguo 12/10/2008, 12:16
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 2 meses
Puntos: 20
Respuesta: Evitar que en la URL aparezca la variable

Cita:
Iniciado por Keysher Ver Mensaje
Si lo recoges con un GET siempre será visible el número, lo puedes llegar a camuflar un poco.

Puedes mandarlos con el método POST y la variable ya no se verá en la URL, pero tampoco es muy dificil llegar a adivinarlo.

Quizás lo más seguro y "secreto" sería mandar el dato como variable de una sesión.
Lo estoy haciendo con variables de sesión y perfecto.

Lo único que tengo un problema con estas dos lineas

Código PHP:
$db_conexion=mysql_connect($sql_host,$sql_usuario,$sql_pass) or die(header ("Location:  $redir"$_SESSION['error']=0;);
        
$usuario_consulta=mysql_db_query($sql_db,$query,$db_conexion) or die(header ("Location:  $redir"$_SESSION['error']=1;); 
Ahora mismo lo tengo así.

Código PHP:
$db_conexion=mysql_connect($sql_host,$sql_usuario,$sql_pass) or die(header ("Location:  $redir?error_login=0"));
        
$usuario_consulta=mysql_db_query($sql_db,$query,$db_conexion) or die(header ("Location:  $redir?error_login=1")); 
Y me gustaría cambiarlo a algo parecido a esto, que lo tengo en otros condicionales.

Código PHP:
Header ("Location: $redir"); //password incorrecto
    
$_SESSION['error']=3
Alguien me echa una mano?

Muchas gracias!
  #4 (permalink)  
Antiguo 12/10/2008, 12:43
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: Evitar que en la URL aparezca la variable

Puedes hacer una función para el tema de los errores:

Código php:
Ver original
  1. function Redirigir_error($num_error) {
  2.     $_SESSION['error']=$num_error;  
  3.     Header ("Location: pag_de_error");
  4.     exit;
  5. }

y luego la llamas desde donde quieras.... en el caso se la conexión a la BDD sería en vez del die().
  #5 (permalink)  
Antiguo 12/10/2008, 13:18
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 2 meses
Puntos: 20
Respuesta: Evitar que en la URL aparezca la variable

Me muestra un error cuando intento provocar el fallo en la conexión


Código:
Warning: mysql_connect() [function.mysql-connect]: Unknown MySQL server host 'localhost3' (11001) in C:\AppServ\www\panel_ME\includes\login.php on line 50

Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\panel_ME\includes\login.php:50) in C:\AppServ\www\panel_ME\includes\login.php on line 20
Y la línea 50 es

$db_conexion=mysql_connect($sql_host,$sql_usuario, $sql_pass) or die(Redirigir_error(0));

  #6 (permalink)  
Antiguo 12/10/2008, 13:23
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: Evitar que en la URL aparezca la variable

El primer error es el de la conexión (que supongo que es el que quieres redirigir). Y el segundo es consecuencia del primero, no se puede hacer un header(location: ) si ya se ha enviado algo al navegador.

Para solucionarlo pon una arroba antes del mysql_connect. Con eso evitas que si se produce un error en esa instrucción lo muestre por pantalla.
  #7 (permalink)  
Antiguo 12/10/2008, 14:50
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 2 meses
Puntos: 20
Respuesta: Evitar que en la URL aparezca la variable

Cita:
Iniciado por Keysher Ver Mensaje
El primer error es el de la conexión (que supongo que es el que quieres redirigir). Y el segundo es consecuencia del primero, no se puede hacer un header(location: ) si ya se ha enviado algo al navegador.

Para solucionarlo pon una arroba antes del mysql_connect. Con eso evitas que si se produce un error en esa instrucción lo muestre por pantalla.
Gracias Keysher!

Código:
$db_conexion=@mysql_connect($sql_host,$sql_usuario,$sql_pass) or die(Redirigir_error(0) );
$usuario_consulta=@mysql_db_query($sql_db,$query,$db_conexion) or die(Redirigir_error(1) );
Ya no me sale el mensaje de error feo por pantalla y me trato el mensaje de error con la función.

Mi pregunta es... como puedo hacer para que en lugar de mostrar el error de no se ha podido conectar a la BD me envie un correo informandome?

O mejor aún... que se suele hacer para tratar este tipo de errores? Porque esta muy bien mantener informado al usuario... pero no se hasta que punto informarle de esas dos consultas puede ser "seguro".

Y me gustaría saber la forma correcta o habitual de tratar estos errores, si es que se tratan (que imagino que si)

Gracias por adelantado!
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 07:54.