Foros del Web » Programando para Internet » PHP »

Seguridad login con Cookies y API

Estas en el tema de Seguridad login con Cookies y API en el foro de PHP en Foros del Web. Buenas! Vengo a ver si me podéis resolver una duda respecto a la seguridad de la cookie :D Estoy trabajando con la API "PEPITO" para ...
  #1 (permalink)  
Antiguo 27/10/2014, 08:38
 
Fecha de Ingreso: abril-2010
Mensajes: 21
Antigüedad: 14 años
Puntos: 0
Seguridad login con Cookies y API

Buenas!

Vengo a ver si me podéis resolver una duda respecto a la seguridad de la cookie :D

Estoy trabajando con la API "PEPITO" para hacer login mediante la API de esa web

El usuario si esta logueado en pepito.com, mediante la API puede hacer login en otras webs que lo permitan.

Si el usuario le da a un boton para hacer login mediante PEPITO, este boton le rederige a pepito.com/auth, si el usuario le da a continuar/permitir, pepito.com/auth envia a miweb.com sus datos, como por ejemplo su IDUSUARIO.

Yo con esa IDUSUARIO compruebo si el usuario ya existe en la db, si no existe creamos el usuario y si existe pues directamente pasamos a hacer login.

Y aquí viene mi duda referente a la seguridad de esa cookie.

¿Como hago para que la cookie no se pueda manipular/robar e iniciar sesión con otro usuario?

Tenia pensado hacer lo siguiente:

Generaramos un TOKEN cifrado al azar
Guardar el token en la base de datos IDUSUARIO -> TOKEN
Guardar en la cookie, su ID usuario y el TOKEN

Después en algunas paginas comprobar si el usuario esta logueado:

Compruebo si $_COOKIE['IDUSUARIO'] existe en la base de datos
si existe paso a comprobar si tiene el mismo token

"$_COOKIE['token'] es igual al 'token' de $_COOKIE['IDUSUARIO'] en la base de datos ?"


Bien, aqui el punto 1 de modificar la cookie para entrar con otro usuario se soluciona, no?

Pero si da el caso de que al usuario le roban la cookie?
Podría hacer login solamente con la cookie, como soluciono esto?


Espero haberme explicado mas o menos bien

Última edición por _vincen_; 27/10/2014 a las 08:47
  #2 (permalink)  
Antiguo 27/10/2014, 08:49
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Seguridad login con Cookies y API

No es más efectiva la funcion $_SESSION ?
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #3 (permalink)  
Antiguo 27/10/2014, 09:16
 
Fecha de Ingreso: abril-2010
Mensajes: 21
Antigüedad: 14 años
Puntos: 0
Respuesta: Seguridad login con Cookies y API

Cita:
Iniciado por loncho_rojas Ver Mensaje
No es más efectiva la funcion $_SESSION ?

Es la que usaba antes, pero tiene muy poca duración de vida y al reiniciar el navegador, la sesión se destruye.
También me ahorro guardar cosas en el servidor, para que no se sature cuando haya mucha gente.
A parte de que me es muy incomodo a la hora de trabajar con la base de datos, si inicio sesión en la pagina web, me cierra sesión en el phpmyadmin, parece que solo pueda haber 1 sesión por usuario o algo así.

Quiero usar cookies, por el tema de la duración de ellas, no quiero que mis visitantes tengan que estar haciendo login cada 30 minutos de inactividad y tambien como he dicho, quitar carga al servidor.
  #4 (permalink)  
Antiguo 27/10/2014, 10:09
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Seguridad login con Cookies y API

Pues si cada 30 min muere una variable de $_SESSION algo no está bien. Lo normal es que muera la Cookie, hay métodos para mantener una SESSION activa... revisa esto
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #5 (permalink)  
Antiguo 27/10/2014, 11:13
 
Fecha de Ingreso: abril-2010
Mensajes: 21
Antigüedad: 14 años
Puntos: 0
Respuesta: Seguridad login con Cookies y API

Cita:
Iniciado por loncho_rojas Ver Mensaje
Pues si cada 30 min muere una variable de $_SESSION algo no está bien. Lo normal es que muera la Cookie, hay métodos para mantener una SESSION activa... revisa [URL="http://www.grabthiscode.com/programacion/como-hacer-un-registro-y-login-php-con-sesiones-y-cookies/"]esto[/URL]
He revisado lo que me has pasado, este el codigo:

Código PHP:
function login ($user,$pass,$recordarme)
{
    
$user mysql_escape_string($user);
    
$pass mysql_escape_string($pass);
    
    if(
strlen($user)<|| strlen($pass)<4) return -3;
    
    global 
$salt;
    
$pass sha1($salt.md5($pass));
    
    
$conexion=mysql_connect("localhost","root","pass",false);
    
$bd mysql_select_db("login",$conexion);
    
mysql_query("SET NAMES 'utf8'");
    
    
$sql "select idUsuario from usuario where UPPER(login)='".strtoupper($user)."' and pass='".$pass."'";
    
$result mysql_query($sql,$conexion);
    if(
mysql_affected_rows()<=|| !$result) return -1//user repetido

//////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////

// Aqui, hace lo que yo hacia con $_SESSION, y si quieres que dure más tiempo hay un if para crear la cookie 


    
    
$row mysql_fetch_array($result);
    
$idUsuario $row['idUsuario'];
    
$_SESSION['usuario']=$idUsuario;
    
    if(
$recordarme){
        global 
$saltCookie;

        
$cookie sha1($saltCookie.md5($idUsuario.date("Y-d-m h:i:s")));

        
$sql2 "update usuario set cookie='".$cookie."',validez=DATE_ADD(now(),INTERVAL 6 MINUTE) where `idUsuario`='".$idUsuario."'";
        
$result2 mysql_query($sql2,$conexion);

        
setCookie("identificado",$cookie,time()+360,'/'); //cookie 6min
    
}
    
$_SESSION['usuario']=$idUsuario;
    
    return 
true;

Hace exactamente lo que quiero hacer yo, para que dure más la sesión hace uso de cookies. Ahí si no me equivoco no hay nada de alargar el tiempo de $_SESSION.

Encripta un par de campos y ya esta, pero si se copia la cookie a otro pc por lo que veo no tiene seguridad y estarias logueado en la web.
  #6 (permalink)  
Antiguo 27/10/2014, 13:05
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 15 años, 6 meses
Puntos: 175
Respuesta: Seguridad login con Cookies y API

Pues esa respuesta que tú planteas es el problema de las Cookies mismas.. Quiero un auto a Diesel, pero me gustaría que no contamine.. uff... a eso voy. A menos que pienses de qué manera puede evitar que se roben las cookies.. además deberías averiguar cómo se roban Cookies, así te pones más tranquilo o más alerta... pero la cookie se almacena en la PC de una persona y a partir de ahi, ya pierdes el control.

Alguna vez se me ha ocurrido poner una pregunta tipo... MES y AÑO de nacimiento.. asi, al recuperar la Cookie el usuario deberá validar ese dato antes de loguearlo de vuelta.. el resultado fue excelente procedimentalmente hablando, pero mis usuarios dejaron de usar mi web XD
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #7 (permalink)  
Antiguo 27/10/2014, 14:51
 
Fecha de Ingreso: abril-2010
Mensajes: 21
Antigüedad: 14 años
Puntos: 0
Respuesta: Seguridad login con Cookies y API

Cita:
Iniciado por loncho_rojas Ver Mensaje
Pues esa respuesta que tú planteas es el problema de las Cookies mismas.. Quiero un auto a Diesel, pero me gustaría que no contamine.. uff... a eso voy. A menos que pienses de qué manera puede evitar que se roben las cookies.. además deberías averiguar cómo se roban Cookies, así te pones más tranquilo o más alerta... pero la cookie se almacena en la PC de una persona y a partir de ahi, ya pierdes el control.

Alguna vez se me ha ocurrido poner una pregunta tipo... MES y AÑO de nacimiento.. asi, al recuperar la Cookie el usuario deberá validar ese dato antes de loguearlo de vuelta.. el resultado fue excelente procedimentalmente hablando, pero mis usuarios dejaron de usar mi web XD
Hmm, pues se me ha ocurrido una cosa.. a ver que opinas..

Al hacer login..

Creo un token único con la ip del usuario

Código PHP:
Ver original
  1. $idusuario = $_POST['userid']; // "id" única de 17 caracteres y limpiada previamente :)
  2. $semillaip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  3. $token = md5($semillaip.$idusuario);
  4. setCookie("token",$token,time()+604800,'/'); //cookie 7 dias
  5. setCookie("idusuario",$idusuario,time()+604800,'/'); //cookie 7 dias
  6.  
  7.  
  8.  
  9. //Ahora para comprobar si el usuario esta logueado, hago lo siguiente:
  10.  
  11.  
  12.  
  13. $idusuariocookie = $_COOKIE[idusuario'];
  14. $semillaipcookie = $_SERVER['HTTP_X_FORWARDED_FOR'];
  15. $token = md5($semillaipcookie.$idusuariocookie);
  16.  
  17.  
  18. //Ahora comparo el token guardado en la base de datos (se guardó cuando el usuario hizo login) con el token generado ahora mismo.
  19.  
  20. //Si coincide = estas logueado, y mostramos contenido
  21. //Si no coincide = si no estas logueado te llevo a logout.php y destruimos sesion y cookie



Como lo ves? El cambio de ip puede cambiar cada 1 semana o cada 6 meses y con esto aumento la seguridad, verdad?

Etiquetas: api, cookies, login, seguridad
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:13.