Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Bloquear acceso despues de varios intentos en login

Estas en el tema de Bloquear acceso despues de varios intentos en login en el foro de PHP en Foros del Web. Hola, se que se ha hablado de temas parecidos aquí, pero lo que hay no es exactamente lo que busco. Ahora mismo en mi sistema, ...
  #1 (permalink)  
Antiguo 20/10/2016, 06:20
 
Fecha de Ingreso: febrero-2012
Mensajes: 66
Antigüedad: 12 años, 2 meses
Puntos: 10
Pregunta Bloquear acceso despues de varios intentos en login

Hola, se que se ha hablado de temas parecidos aquí, pero lo que hay no es exactamente lo que busco.
Ahora mismo en mi sistema, cuando un usuario pone tres veces mal la contraseña, bloqueo ese usuario. El problema que tiene este sistema es que alguien que no sea el usuario puede bloquearlo intentando hacer login con su nombre de usuario.
He pensando en bloquear la ip, pero ahora mismo si varios usuarios entran desde la misma empresa, la ip que da es la misma, por lo que dejaría sin acceso al resto de usuarios con esa misma ip.
Las variables de sesión o cookies tampoco son válidas, ya que se pueden borrar e intentar de nuevo el login.
No se si alguien ha hecho algo para solventar este problema.
Un saludo!
  #2 (permalink)  
Antiguo 20/10/2016, 08:33
Avatar de MaNuX0218  
Fecha de Ingreso: marzo-2014
Mensajes: 787
Antigüedad: 10 años, 1 mes
Puntos: 67
Respuesta: Bloquear acceso despues de varios intentos en login

Yo registraria los intentos en la base de datos y hay añadir una fecha donde podrá volver a entrar. Con eso al intentar volver acceder si la fecha no a expirado no podra acceder, de lo contrario si.

Saludos.
__________________
No te preocupes si tu código no funciona bien. Si todo lo hiciera, no tendrías trabajo.
  #3 (permalink)  
Antiguo 20/10/2016, 10:00
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: Bloquear acceso despues de varios intentos en login

Hola Hachikora,

Yo enviaría un e-mail al usuario con el aviso del bloqueo y un enlace válido para un plazo de tiempo, por ejemplo entre 30 y 90 minutos (es un decir), mediante el que pueda cambiar su contraseña o directamente darle acceso, de esa forma, si no ha sido el usuario quien ha bloqueado su cuenta, se entera y la puede desbloquear y si ha sido el usuario, puede cambiar la contraseña para poder acceder.

Espero que te sirva.
  #4 (permalink)  
Antiguo 20/10/2016, 16:56
Avatar de AngelKrak  
Fecha de Ingreso: noviembre-2014
Mensajes: 917
Antigüedad: 9 años, 5 meses
Puntos: 91
Respuesta: Bloquear acceso despues de varios intentos en login

puedes hacerlo mediante sessiones, guarda los intentos que has hecho en sessiones y listo
  #5 (permalink)  
Antiguo 20/10/2016, 19:02
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 2.031
Antigüedad: 11 años, 8 meses
Puntos: 52
Respuesta: Bloquear acceso despues de varios intentos en login

Pues registra las dos ips, la publica y la individual de cada persona..
y en eso te basas.
por ejemplo en mi trabajo aparece tanto mi ip de pc como mi ip de celular.
ambas tienen la misma ip publica y la que varia es la otra.
__________________
a veces creemos que es algo básico pero al profundizar nos damos cuenta que estábamos tocando solo la cola de la culebra
  #6 (permalink)  
Antiguo 21/10/2016, 00:58
Avatar de MaNuX0218  
Fecha de Ingreso: marzo-2014
Mensajes: 787
Antigüedad: 10 años, 1 mes
Puntos: 67
Respuesta: Bloquear acceso despues de varios intentos en login

Cita:
Iniciado por minombreesmm Ver Mensaje
Pues registra las dos ips, la publica y la individual de cada persona..
y en eso te basas.
por ejemplo en mi trabajo aparece tanto mi ip de pc como mi ip de celular.
ambas tienen la misma ip publica y la que varia es la otra.
No creo que sea muy factible por IP por que imagina que accede desde otro ordenador al utilizar otra ip distinta podria acceder.

Saludos.
__________________
No te preocupes si tu código no funciona bien. Si todo lo hiciera, no tendrías trabajo.
  #7 (permalink)  
Antiguo 21/10/2016, 02:11
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Bloquear acceso despues de varios intentos en login

Yo lo que haría sería bloquear los intentos de login de ese usuario durante un tiempo incremental. Por ejemplo, si fallas 3 logins seguidos has de esperar 15 minutos para seguir probando, luego 30 minutos, luego 1 hora, etc. Y, a la vez que se bloquea el usuario durante "x minutos", se envía un e-mail a la cuenta asociada al usuario indicando que se han detectado intentos de login.
__________________
Aviso: No se resuelven dudas por MP!
  #8 (permalink)  
Antiguo 21/10/2016, 03:32
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: Bloquear acceso despues de varios intentos en login

Por algo Malenko es Moderador... para mi, la mejor solución propuesta en este hilo, la suya...
  #9 (permalink)  
Antiguo 21/10/2016, 08:45
 
Fecha de Ingreso: diciembre-2012
Ubicación: Murcia
Mensajes: 329
Antigüedad: 11 años, 4 meses
Puntos: 4
Respuesta: Bloquear acceso despues de varios intentos en login

Estaba aburrido, espero que te sirva, siguiendo el ejemplo de @Malenko

Código PHP:
$minutesAgo date('i'time() - $_SESSION['loginActualErrorTime']);
$continue true;
$login['ban_time']= 10//Tiempo en Minutos
$login['max_errors'] = 10//Max errores
if(isset($_SESSION['loginActualErrorTime']) && $minutesAgo <= $login['ban_time']){
    
//Esta Baneado
    
$continue false;
}elseif(isset(
$_SESSION['loginActualErrorTime']) && $minutesAgo $login['ban_time']){
    unset(
$_SESSION['loginActualErrorTime']);
    unset(
$_SESSION['loginErrorTimes']);
}

if(
$continue){
    if(
$_SESSION['loginErrorTimes'] >= $login['max_errors']){
        
//Ha superado el Limite de intentos
    
}else{
        
//Hacemos LogIn Si el Usuario o contraseña son incorrectos hacemos lo que esta a continuacion.
        
$_SESSION['loginErrorTimes']++;
    }

No lo e probado pero debería de funcionar.
  #10 (permalink)  
Antiguo 21/10/2016, 08:50
 
Fecha de Ingreso: febrero-2012
Mensajes: 66
Antigüedad: 12 años, 2 meses
Puntos: 10
Respuesta: Bloquear acceso despues de varios intentos en login

Cita:
Iniciado por Jose789 Ver Mensaje
Estaba aburrido, espero que te sirva, siguiendo el ejemplo de @Malenko

Código PHP:
$minutesAgo date('i'time() - $_SESSION['loginActualErrorTime']);
$continue true;
$login['ban_time']= 10//Tiempo en Minutos
$login['max_errors'] = 10//Max errores
if(isset($_SESSION['loginActualErrorTime']) && $minutesAgo <= $login['ban_time']){
    
//Esta Baneado
    
$continue false;
}elseif(isset(
$_SESSION['loginActualErrorTime']) && $minutesAgo $login['ban_time']){
    unset(
$_SESSION['loginActualErrorTime']);
    unset(
$_SESSION['loginErrorTimes']);
}

if(
$continue){
    if(
$_SESSION['loginErrorTimes'] >= $login['max_errors']){
        
//Ha superado el Limite de intentos
    
}else{
        
//Hacemos LogIn Si el Usuario o contraseña son incorrectos hacemos lo que esta a continuacion.
        
$_SESSION['loginErrorTimes']++;
    }

No lo e probado pero debería de funcionar.
El problema de las variables de sesión es que el usuario puede borrarlas, por lo que podría intentar entrar indefinidamente. Pero gracias!
  #11 (permalink)  
Antiguo 21/10/2016, 08:51
 
Fecha de Ingreso: febrero-2012
Mensajes: 66
Antigüedad: 12 años, 2 meses
Puntos: 10
Respuesta: Bloquear acceso despues de varios intentos en login

Cita:
Iniciado por minombreesmm Ver Mensaje
Pues registra las dos ips, la publica y la individual de cada persona..
y en eso te basas.
por ejemplo en mi trabajo aparece tanto mi ip de pc como mi ip de celular.
ambas tienen la misma ip publica y la que varia es la otra.
¿Como consigues la ip privada del equipo? Creía que solo se podía acceder a la ip pública.
  #12 (permalink)  
Antiguo 21/10/2016, 09:09
 
Fecha de Ingreso: febrero-2012
Mensajes: 66
Antigüedad: 12 años, 2 meses
Puntos: 10
Respuesta: Bloquear acceso despues de varios intentos en login

Cita:
Iniciado por Malenko Ver Mensaje
Yo lo que haría sería bloquear los intentos de login de ese usuario durante un tiempo incremental. Por ejemplo, si fallas 3 logins seguidos has de esperar 15 minutos para seguir probando, luego 30 minutos, luego 1 hora, etc. Y, a la vez que se bloquea el usuario durante "x minutos", se envía un e-mail a la cuenta asociada al usuario indicando que se han detectado intentos de login.
Y si guardara además la ip que está usando el cliente que quiere loguearse? Es decir, intento entrar con el usuario "carmen" y con la ip "189.34.25.140". Uso el procedimiento que has indicado, para bloquear incrementalmente, pero si intentan acceder con ese usuario en otra ip, no le tengo en cuenta los tres primeros intentos. Podría hacer esto con 3 ips diferente, para que el atacante no intente cambiar de ip cada vez que se le bloquee. Además si desde esa ip se intenta acceder a otro usuario y de nuevo falla tres veces, podría bloquear la ip cierto tiempo.
¿Que te parece? El problema que tengo solo con el sistema de emails, es que no todos los usuarios de mi sistema tienen email. Es que me lo ponen complicado...
  #13 (permalink)  
Antiguo 21/10/2016, 09:24
Avatar de MaNuX0218  
Fecha de Ingreso: marzo-2014
Mensajes: 787
Antigüedad: 10 años, 1 mes
Puntos: 67
Respuesta: Bloquear acceso despues de varios intentos en login

Intenta lo que yo te he dicho porque restringiendo su cuenta mediante base de datos por mucho que cambie ip, borre cookies, sesiones, etc seguirá sin poder acceder.

Saludos.
__________________
No te preocupes si tu código no funciona bien. Si todo lo hiciera, no tendrías trabajo.
  #14 (permalink)  
Antiguo 21/10/2016, 09:34
 
Fecha de Ingreso: febrero-2012
Mensajes: 66
Antigüedad: 12 años, 2 meses
Puntos: 10
Respuesta: Bloquear acceso despues de varios intentos en login

Cita:
Iniciado por MaNuX0218 Ver Mensaje
Intenta lo que yo te he dicho porque restringiendo su cuenta mediante base de datos por mucho que cambie ip, borre cookies, sesiones, etc seguirá sin poder acceder.

Saludos.
Claro, el problema como te digo es que un atacante podría bloquear a varios usuarios. Si un atacante quiere amargar la vida a un usuario, podría estar bloqueándole la cuenta varias veces al día. Por eso digo que BBDD con nombre de usuario + IP me parece una solución intermedia.

Aun que parezca que entrar al email porque han bloqueado mi usuario es algo sencillo, para muchos usuarios es costoso.

Tambien he pensado en sacar un hash con toda la información del ordenador que intenta acceder, es decir, ip más datos del navegador, más localización, etc. Pero no se si es factible.
  #15 (permalink)  
Antiguo 21/10/2016, 09:42
Avatar de MaNuX0218  
Fecha de Ingreso: marzo-2014
Mensajes: 787
Antigüedad: 10 años, 1 mes
Puntos: 67
Respuesta: Bloquear acceso despues de varios intentos en login

Para esa solución está lo que te ha propuesto Malenko que se le envie un correo al propietario y decirle por ejemplo eres tu? si con un enlace mismo verifica que era el no se le bloquea, de lo contrario si. Eso lo evitaria porque el que intenta acceder lo verificará para que no se bloquee no?

Y bueno el capturar los datos que indicas hoy en día es facil engañar para ese tipo de datos. La mejor solución que yo le veo ya que el usuario tiene una cuenta creada es restringirlo atraves de su cuenta.

Saludos.
__________________
No te preocupes si tu código no funciona bien. Si todo lo hiciera, no tendrías trabajo.
  #16 (permalink)  
Antiguo 21/10/2016, 11:57
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 2.031
Antigüedad: 11 años, 8 meses
Puntos: 52
Respuesta: Bloquear acceso despues de varios intentos en login

Cita:
Iniciado por Hachikora Ver Mensaje
¿Como consigues la ip privada del equipo? Creía que solo se podía acceder a la ip pública.
$_SERVER['REMOTE_ADDR'] te muestra la del equipo. hay funciones que te muestran solo la publica.
mientras que $_SERVER['REMOTE_ADDR'] te muestra diferentes ips dependiendo si te conectas de tu celular u ordenador.
por eso es que la otra vez estaba investigando una funcion que te muestre solo la ip publica.
ya que $_SERVER['REMOTE_ADDR'] te muestra la de tu equipo.
__________________
a veces creemos que es algo básico pero al profundizar nos damos cuenta que estábamos tocando solo la cola de la culebra
  #17 (permalink)  
Antiguo 21/10/2016, 12:02
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 2.031
Antigüedad: 11 años, 8 meses
Puntos: 52
Respuesta: Bloquear acceso despues de varios intentos en login

Yo creo que hagas que su usuario no sea su correo si no uno que el invente. asi nadie sabra su usuario mas que el y asi no habra un atacante que sepa que atacar..
creo que es la mejor solucion.
no ocupas ips ni nada..
mandale un link al usuario y que lo cambie por un nombre de usuario diferente a su correo.
añadirias un campo extra pero te evitaria problemas, y si alguien averigua su usuario entonces haces el mismo procedimiento, se lo envias al correo para que lo cambie.
__________________
a veces creemos que es algo básico pero al profundizar nos damos cuenta que estábamos tocando solo la cola de la culebra
  #18 (permalink)  
Antiguo 21/10/2016, 16:26
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Bloquear acceso despues de varios intentos en login

Cita:
Iniciado por Hachikora Ver Mensaje
Claro, el problema como te digo es que un atacante podría bloquear a varios usuarios. Si un atacante quiere amargar la vida a un usuario, podría estar bloqueándole la cuenta varias veces al día. Por eso digo que BBDD con nombre de usuario + IP me parece una solución intermedia.

Aun que parezca que entrar al email porque han bloqueado mi usuario es algo sencillo, para muchos usuarios es costoso.

Tambien he pensado en sacar un hash con toda la información del ordenador que intenta acceder, es decir, ip más datos del navegador, más localización, etc. Pero no se si es factible.
Precisamente no quieres usar la IP porque si cambia de IP puede seguir intentando acceder a la cuenta y tu lo que quieres es proteger el acceso a la cuenta. Recuerda que no puedes recoger información del ordenador cliente de forma tan alegre ya que has de cumplir con una serie de leyes sobre protección de datos, etc.

Yo he tenido que implementar sistemas parecidos y lo que te he comentado es lo que mejor me ha funcionado.


Cita:
Iniciado por minombreesmm Ver Mensaje
$_SERVER['REMOTE_ADDR'] te muestra la del equipo. hay funciones que te muestran solo la publica.
mientras que $_SERVER['REMOTE_ADDR'] te muestra diferentes ips dependiendo si te conectas de tu celular u ordenador.
por eso es que la otra vez estaba investigando una funcion que te muestre solo la ip publica.
ya que $_SERVER['REMOTE_ADDR'] te muestra la de tu equipo.
El problema es que si tus usuarios se conectan a través de internet por el mismo router (por ejemplo en las pymes) todos van a tener la misma IP.
__________________
Aviso: No se resuelven dudas por MP!
  #19 (permalink)  
Antiguo 21/10/2016, 18:51
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 2.031
Antigüedad: 11 años, 8 meses
Puntos: 52
Respuesta: Bloquear acceso despues de varios intentos en login

Cita:
Iniciado por Malenko Ver Mensaje
El problema es que si tus usuarios se conectan a través de internet por el mismo router (por ejemplo en las pymes) todos van a tener la misma IP.
Bueno le di otra opcion

Cita:
Iniciado por minombreesmm Ver Mensaje
Yo creo que hagas que su usuario no sea su correo si no uno que el invente. asi nadie sabra su usuario mas que el y asi no habra un atacante que sepa que atacar..
creo que es la mejor solucion.
no ocupas ips ni nada..
mandale un link al usuario y que lo cambie por un nombre de usuario diferente a su correo.
añadirias un campo extra pero te evitaria problemas, y si alguien averigua su usuario entonces haces el mismo procedimiento, se lo envias al correo para que lo cambie.
__________________
a veces creemos que es algo básico pero al profundizar nos damos cuenta que estábamos tocando solo la cola de la culebra
  #20 (permalink)  
Antiguo 21/10/2016, 18:54
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 2.031
Antigüedad: 11 años, 8 meses
Puntos: 52
Respuesta: Bloquear acceso despues de varios intentos en login

Cita:
Iniciado por Malenko Ver Mensaje
Recuerda que no puedes recoger información del ordenador cliente de forma tan alegre ya que has de cumplir con una serie de leyes sobre protección de datos, etc.
Imagino que una cosa es recopilar para el correcto funcionamiento del sitio y la otra es distribuir y publicar esa información sin previos permisos.

los demas datos te los das google analytics y para uno estudiar las visitas y adapatar tu sitio a eso creo que es necesario saber todos esos datos.
Asi me doy cuenta si la mayoria de mis usuarios usan I.E y que version y asi poder adaptar el sitio para esas compatibilidades entre otros muchos datos que podrian ser necesarios.
__________________
a veces creemos que es algo básico pero al profundizar nos damos cuenta que estábamos tocando solo la cola de la culebra
  #21 (permalink)  
Antiguo 22/10/2016, 01:06
 
Fecha de Ingreso: febrero-2012
Mensajes: 66
Antigüedad: 12 años, 2 meses
Puntos: 10
Respuesta: Bloquear acceso despues de varios intentos en login

Muchas gracias a todos, voy a coger las ideas de minombreesmm y de Malenko y las juntare, es decir, que los usuarios no usen el email y el tiempo incremental como ha dicho Malenko.

Mi idea era intentar poder bloquear a un equipo, pero suponía que no había un método fiable para saber que ordenador en concreto está intentando acceder, y tener que recurrir a ip o al bloqueo del usuario como tal.

Muchas gracias y un saludo a todos.

Etiquetas: login
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 21:16.