Foros del Web » Programando para Internet » PHP »

Verificacion Para Evitar Robo Sesion en PHP

Estas en el tema de Verificacion Para Evitar Robo Sesion en PHP en el foro de PHP en Foros del Web. Hola como estais, he generado un script que en principio evita el robo de una sesión en PHP. 1) Me gustaría saber si tengo que ...
  #1 (permalink)  
Antiguo 23/12/2008, 09:56
 
Fecha de Ingreso: agosto-2007
Mensajes: 248
Antigüedad: 16 años, 8 meses
Puntos: 1
De acuerdo Verificacion Para Evitar Robo Sesion en PHP

Hola como estais, he generado un script que en principio evita el robo de una sesión en PHP.

1) Me gustaría saber si tengo que incluirlo en todos y cada uno de mis scripts y en tal caso como lo podría hacer. (que uso: include, require, include_once o require_once ???)

2) También si veis que algo se puede mejorar me gustaría que lo comentarais aqui para que todos aprendamos.

Muchas Gracias ¡¡¡


Código:
<?php

//La sesion caduca a las 2 horas
ini_set("session.gc_maxlifetime","7200"); 
ini_set("session.cookie_lifetime", "7200");

//Inicio de Sesion
session_start(  );

//Genero codigo de seguridad a partir del navegador y de la IP del usuario
$codigo_seguridad = md5($_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_ADDR']);

//Si o bien el nombre de usuario o la contraseña o ambos no existen genero un nuevo
//codigo de seguridad asignandoselo a la variable superglobal $_SESSION 	  
if ((empty($_SESSION["sesion_nombre_usuario"])) || (empty($_SESSION["sesion_nombre_usuario"])))
  {
    session_regenerate_id(  );
    echo ("Nueva sesion, guardando codigo de seguridad.");
    $_SESSION["codigo_seguridad"] = $codigo_seguridad;
  }

//Comparo si el codigo de seguridad de la sesion es igual al del usuario
//Si son distintas le redirijo a una pagina en la que muestro Acceso Prohibido

if (strcmp($_SESSION["codigo_seguridad"], $codigo_seguridad) !== 0) 
  {
    session_regenerate_id(  );
    header("Location: acceso_prohibido.php");
    $_SESSION = array(  );
    $_SESSION["codigo_seguridad"] = $codigo_seguridad;	
  }

// Y en otro caso quiere decirse que el usuario es el correcto y por tanto
//la conexion ha sido verificada y es todo correcto

else 
  {
    echo ("Conexion Verificada!");
  }

?>
  #2 (permalink)  
Antiguo 23/12/2008, 23:08
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
De acuerdo Respuesta: Verificacion Para Evitar Robo Sesion en PHP

pues yo opino que si hay que ponerlo en cada pagina donde se requiera
yo uso normalmente include_once

saludos
__________________
gerardo
  #3 (permalink)  
Antiguo 24/12/2008, 02:54
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 2 meses
Puntos: 20
Respuesta: Verificacion Para Evitar Robo Sesion en PHP

Me pregunto si no es seguro guardar en una variable de sesión cuando se logea el usuario contra la BBDD recupero el usuario y lo guardo.

Luego en todas las páginas si existe dicha variable le muestro la página "restringida" sino no.

if (isset($_SESSION['usuario_login'])) {
$user=$_SESSION['usuario_login'];

PAGINA

}else{ no tienes autorización}

Hay algun problema en hacerlo así?
  #4 (permalink)  
Antiguo 24/12/2008, 02:58
 
Fecha de Ingreso: enero-2005
Mensajes: 114
Antigüedad: 19 años, 3 meses
Puntos: 0
Respuesta: Verificacion Para Evitar Robo Sesion en PHP

Saludos superdober!!

Soy bastante novato en php, pero en algoritmos de hash y redes sí que tengo más idea,

mira, en primer lugar, cambiaría automáticamente el md5 por el sha-1, es bastante más difícil de romper, y a tí te cuesta bastante poco cambiarlo, basta poner sha1 en vez de md5 en tu código :)

Por otra parte, por lo que yo veo, tu código va bien contra ataques externo a tu red local, pero un usuario de tu red interna todavía podría hacer algo, ya que un ordenador de tu propia red puede tener tu misma dirección IP y tu mismo navegador, por lo tanto tu sistema de seguridad no serviría contra él.

La verdad es que ahora mismo no se me ocurre nada para poder salvar ese escollo, yo ya me hecho a un lado y dejo a los expertos que opinen...

Otra cosa, piensa que puede haber usuarios de tu web que puedan perjudicarse de este sistema de seguridad, si tienen conexión a Internet a través de un proxy, su IP puede cambiar de un acceso a otro, con lo que los dejarías fuera!!

ALEX

Última edición por AlexWeb; 24/12/2008 a las 03:21
  #5 (permalink)  
Antiguo 25/12/2008, 08:47
 
Fecha de Ingreso: agosto-2007
Mensajes: 248
Antigüedad: 16 años, 8 meses
Puntos: 1
De acuerdo Respuesta: Verificacion Para Evitar Robo Sesion en PHP

Usuario Anterior:
Pero un usuario de tu red interna todavía podría hacer algo, ya que un ordenador de tu propia red puede tener tu misma dirección IP y tu mismo navegador, por lo tanto tu sistema de seguridad no serviría contra él.

Respuesta:
En principio tenemos IP fija no configuramos en los equipos DHCP y es cierto que el navegador puede ser el mismo en los equipos o Ie7 o Firefox. Lo del proxy también lo comprobaré.

Lo del sha1 es una muy buena idea tomaré nota al respecto y gracias.

Gracias a Todos ¡¡¡¡
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 09:38.