Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Fuerza bruta

Estas en el tema de Fuerza bruta en el foro de PHP en Foros del Web. Hola, paso a comentar a ver si me pueden ayudar. Desde el login.php me traigo los datos del user a ctrl.php ahi mismo lo valido ...
  #1 (permalink)  
Antiguo 24/03/2014, 21:13
Avatar de asus090102  
Fecha de Ingreso: mayo-2012
Ubicación: Ensenada- Buenos Aires
Mensajes: 67
Antigüedad: 12 años
Puntos: 1
Fuerza bruta

Hola, paso a comentar a ver si me pueden ayudar.
Desde el login.php me traigo los datos del user a ctrl.php ahi mismo lo valido y lo redirecciono a donde corresponde. En esta instancia tambien le tomo la ip y el tiempo de logueo, los guardo en una tabla mysql y lo dejo ingresar si está registrado.
Por lo que leí me pueden averiguar la clave de cualquier usuario por fuerza bruta, por lo que necesitaría saber como hacer para, despues de X cantidad de fallidos, bloquear su intento de ingreso durante un tiempo.
Comparto el ctrl.php a ver si me ayudan a que poner donde. Muchas pero muchas pero muchas muchas gracias.

Código PHP:
<?php
include ("con.php");
     
$myusuario mysql_query("select idusuario from usuarios where idusuario =  '".htmlentities($_POST["usuario"])."'",$conexion);
     
$nmyusuario mysql_num_rows($myusuario);
     
$usu$_POST["usuario"];
     
$ip $_SERVER['REMOTE_ADDR'];
     
$time $_SERVER['REQUEST_TIME'];
     
if(
$nmyusuario != 0){
          
$sql "select idusuario from usuarios where estado = 1 and idusuario = '".htmlentities($_POST["usuario"])."' and clave = '".md5(htmlentities($_POST["clave"]))."'";

          
$myclave mysql_query($sql,$conexion);
          
$nmyclave mysql_num_rows($myclave);

         if(
$nmyclave != 0){
               
session_start();
               
$_SESSION["autentica"] = "SIP";
               
$_SESSION["usuarioactual"] = mysql_result($myclave,0,0); 
               
$_SESSION["estado"] = 1;
         
 
$s "INSERT INTO login (usuario,ip,time) VALUES ('$usu','$ip','$time')";
mysql_query($s);

header ("Location: app.php");
?>
  #2 (permalink)  
Antiguo 25/03/2014, 03:55
 
Fecha de Ingreso: junio-2011
Ubicación: Barcelona
Mensajes: 212
Antigüedad: 12 años, 11 meses
Puntos: 17
Respuesta: Fuerza bruta

No te sale mas a cuenta hacer un pequeño captcha?

Un saludo.
__________________
Twitter: @ed33x
  #3 (permalink)  
Antiguo 25/03/2014, 04:28
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Fuerza bruta

Guarda los intentos fallidos en una tabla alterna.

Y cuando alguien intente loguear X usuario, compruebas los últimos 5 intentos. Si entre ellos han pasado menos de 5 minutos, muestrale un mensaje de error de que el usuario está bloqueado

Por ejemplo :P
__________________
>> Eleazan's Source
>> @Eleazan
  #4 (permalink)  
Antiguo 25/03/2014, 06:32
Avatar de asus090102  
Fecha de Ingreso: mayo-2012
Ubicación: Ensenada- Buenos Aires
Mensajes: 67
Antigüedad: 12 años
Puntos: 1
Respuesta: Fuerza bruta

Cita:
Iniciado por Eleazan Ver Mensaje
Guarda los intentos fallidos en una tabla alterna.

Y cuando alguien intente loguear X usuario, compruebas los últimos 5 intentos. Si entre ellos han pasado menos de 5 minutos, muestrale un mensaje de error de que el usuario está bloqueado

Por ejemplo :P
Antes que nada gracias por responder.
Lo que tendría que hacer es, despues del INSERT TO, algo así como:

$sel = "SELECT * FROM logueos LIMIT 5";
$query = mysql_query($sel) or die(mysql_error());
while ($row = mysql_fetch_assoc($query) {
echo $row['idusuario'];
}

con tiempo de 5 min?
  #5 (permalink)  
Antiguo 25/03/2014, 07:19
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Fuerza bruta

No, deberías hacerlo antes...

Pq sino seguiria probando contraseñas sin problemas, la idea seria la siguiente

Código CODE:
Ver original
  1. 1 Usuario / bot introduce user+pass
  2. 2 Compruebas los 5 últimos accesos erroneos
  3.     2.1 Si han pasado menos de 5 minutos
  4.         2.1.1 le muestras un error
  5.     2.2 Si no han pasado menos de 5 minutos
  6.         2.2.1 Compruebas que el usuario y pass sea correcto
  7.            2.2.1.1 Si es correcto, login normal
  8.            2.2.1.2 Si es incorrecto, lo guardas como acceso erroneo, y muestras error de usuario y/o contraseña

Esa sería la idea en general.

Y sino, añade un captcha ;)
__________________
>> Eleazan's Source
>> @Eleazan
  #6 (permalink)  
Antiguo 28/03/2014, 20:49
Avatar de asus090102  
Fecha de Ingreso: mayo-2012
Ubicación: Ensenada- Buenos Aires
Mensajes: 67
Antigüedad: 12 años
Puntos: 1
Respuesta: Fuerza bruta

Gracias agente P
  #7 (permalink)  
Antiguo 30/03/2014, 09:33
fiu
 
Fecha de Ingreso: diciembre-2006
Ubicación: Barcelona
Mensajes: 128
Antigüedad: 17 años, 4 meses
Puntos: 8
Respuesta: Fuerza bruta

Hola,

si sirve de ayuda yo hice algo similar, hacía un insert de la ip, el login,
Código MySQL:
Ver original
  1. INSERT INTO logins (login, ip) VALUES ('$user','$ip')
que tambien tiene un campo TIMESTAMP que se va llenando sólo.
si era fallido le ponia ! delante
Código MySQL:
Ver original
  1. INSERT INTO adm_conexiones (login, ip) VALUES ('!$user','$ip')

pero lo importante es que antes consultaba la tabla con algo así:

Código MySQL:
Ver original
  1. SELECT COUNT(*) AS intentos
  2.     FROM logins
  3.     WHERE ip='$ip'
  4.     AND login LIKE '!%'
  5.     AND fecha>=DATE_SUB( NOW(), INTERVAL 5 MINUTE )

que me devolvía el numero de intentos fallildos en el intervalo establecido y entonces decidia que hacer.
No se si será la mejor forma pero puede ser útil :)

Etiquetas: html, mysql, select, sql, tabla, usuarios
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 02:43.