Foros del Web » Programando para Internet » PHP »

Como solucionar esta falla de seguridad?

Estas en el tema de Como solucionar esta falla de seguridad? en el foro de PHP en Foros del Web. Hasta ahora no le habia prestado importancia, pero en este momento me gustaria encontrarle una solucion. Imaginen esta situacion: Se loguean a un sitio, navegan, ...
  #1 (permalink)  
Antiguo 07/10/2003, 22:03
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 876
Antigüedad: 15 años, 6 meses
Puntos: 0
Como solucionar esta falla de seguridad?

Hasta ahora no le habia prestado importancia, pero en este momento me gustaria encontrarle una solucion.
Imaginen esta situacion: Se loguean a un sitio, navegan, luego lo abandonan finalizando la sesion correctamente. Pero dejan el navegador abierto y la proxima persona que usa la pc comienza a darle "Atras", hasta que se visualiza un cartel parecido a este justo al querer visualizar la pagina que recibia los datos del formulario de ingreso

Si le dan reintentar, los datos se reenvian y "uno" vuelve a loguearse.
Hay forma de solucionar esto?
  #2 (permalink)  
Antiguo 07/10/2003, 23:39
 
Fecha de Ingreso: septiembre-2003
Mensajes: 248
Antigüedad: 14 años, 2 meses
Puntos: 2
Hola, quizá haya otras soluciones pero lo que yo hago para evitar ese problema es iniciar cada página con
session_start();
if (session_is_registered ($codigo)) then
{
// contenido de la página
}
else
{
echo "Acceso denegado";
}
de tal manera que cuando se desloguea con session_destroy y bool session_unregister la variable $cod no tenga valor y entre al else de la condición
suerte!
__________________
Jose A
  #3 (permalink)  
Antiguo 07/10/2003, 23:59
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 876
Antigüedad: 15 años, 6 meses
Puntos: 0
Yo tambien hago eso, pero cuando uno le da "reintentar" al cartelito, reenvia los datos de nick y contraseña y vuelve a loguearse desde cero. O sea que luego de reenviar la informacion se realiza el proceso de validacion de datos y de creacion de sesion.
Mas sugerencias?
  #4 (permalink)  
Antiguo 08/10/2003, 03:55
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Eso es porque todavia el navegador "recuerda" la pagina destino del formulario.

Es caso es igual que cuando uno da a actualizar en la pagina destino de ingresar datos en la base de datos: si lo haces mal, te añade un nuevo registro cada vez que des a actualizar.

El "truco" es no mandar al navegador la pagina de destino del formulario, sino que hacer la accion del formulario (añadir registro, autentificar, ...) y justo despues redireccionar con header("Location"). Asi no le llega al navegador ninguna pagina que sea el destino del formulario, y no sale esa posibilidad de reenviar los datos.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 08/10/2003, 08:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Redireccionando como comenta josemi con un "location" se solventa el problema. Incluso si lo mandas al mismo script (a si mismo) ..

Si has de presentar algún mensajito de que el proceso fué correcto (con exito) o hubo algún error/fallo ... Usa variables de control para gestionar dichos mensajes y los representas en la página que quieras (sea si misma u otras).

Ejemplo ... al terminar tu proceso .. IF fué ok todo:

header ("location: nose.php?msg=1");

Else ...

header ("location: nose.php?msg=2");

Ese "nose.php" podría ser una página centralizada donde muestres los mensajes de error/exito que a su vez espere un tiempo y redireccione a otro sitio (por ejemplo como lo hacen estos foros cuando insertas un mensaje ..). O la misma pàgina (script) que corresponda.

En el script/página que corresponda sólo tienes que ver si esa variable está definida para presentar el mensaje si corresponde:

Y .. si por ejemplo usas identificadores como "indices" de un array .. podrías tener todos tus mensajes en dicho array tipo:

Código PHP:
if (isset($_GET['msg'])){

// el array de mensajes ...
$msgs[1]="Mensaje 1 .. bla bla.. TODO OK";
$msgs[2]="Mensaje 2 .. bla bla.. OPS! un error";

// Recoger la variable de control ...
$id_msg=$_GET['msg'];

// mostrar el mensajito usando el indice de nuestra variable de control contra nuestro array de mensajes.
echo "Atención: ".$msgs[$id_msg];

Y .. ya está .. Con esta mini-técnica se solventan todos los problemas de "re-logins" .. "registros duplicados" (sucede cuando muestras los mensajes de error/exito en la misma página que haga el proceso de insertar registros en tu BD .. enviar e-mails .. etc ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 08/10/2003, 12:56
 
Fecha de Ingreso: junio-2002
Ubicación: Buenos Aires, Argentina
Mensajes: 876
Antigüedad: 15 años, 6 meses
Puntos: 0
Muchas gracias!
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 14:25.