Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: pedrox@ en 27 Febrero 2009, 00:22 am



Título: Proteger login contra bruteforcers
Publicado por: pedrox@ en 27 Febrero 2009, 00:22 am
Hola buenas!

Bueno estaba haciendo un login para mi web con php, mysql.
Bueno por ejemplo:

Código
  1. <form action="/index.php" method="post">
  2. <p>
  3.  <input type="text" name="usuario" value="Nombre usuario" onClick="this.value=''">
  4.    </p>
  5. <p><br>
  6.      <input type="password" name="clave" value="Password" onClick="this.value=''">
  7.  <br>
  8.  <br>
  9.      <input type="submit" name="enviar" value="Enviar">
  10.  
  11.    </p>
  12. </form>

compruebo que si $_POST['enviar'] tiene valor, cogo $_POST['usuario'] y $_POST['clave'], envio la consulta a la db, si me devuelve algun resultado, creo una session, sino muestro el típico error.

Entonces cualquier persona malintencionada que vería el login de mi web, podría ver los nombres de los campos que uso para enviar el usuario, password (en el fuente html), el error que muestra al no hacer login, hacerse un pequeño script en perl o en lo que sea y enviar valores mediante peticiones POST a los campos hasta obtener usuario, password...

Soluciones??
pues sí, se podría usar captcha, una tabla en la db que guarde los logins fallidos por ip, si hace 3 o los que sea bloquee la ip y tal...

Alguien sabe hacerlo de otra forma y que sea seguro?

Un saludo y gracias de antemano...


Título: Re: Proteger login contra bruteforcers
Publicado por: [u]nsigned en 27 Febrero 2009, 00:45 am
Hola, bueno la solucoion mas facil es usar una imagen generada con php, como en el sistema de registro de cualquier foro o web.

imagen_anti_ataque.php

Código:
<?php
  $ancho=100;
  $alto=30;
  $imagen=imageCreate($ancho,$alto);
  $amarillo=ImageColorAllocate($imagen,255,255,0);
  ImageFill($imagen,0,0,$amarillo);
  $rojo=ImageColorAllocate($imagen,255,0,0);
  $valoraleatorio=rand(100000,999999);
  session_start();
  $_SESSION['numeroaleatorio']=$valoraleatorio;
  ImageString($imagen,5,25,5,$valoraleatorio,$rojo);
  for($c=0;$c<=5;$c++)
  {
    $x1=rand(0,$ancho);
    $y1=rand(0,$alto);
    $x2=rand(0,$ancho);
    $y2=rand(0,$alto);
    ImageLine($imagen,$x1,$y1,$x2,$y2,$rojo);
  }
  Header ("Content-type: image/jpeg");
  ImageJPEG ($imagen);
  ImageDestroy($imagen);
?>

Luego desde la pagina del formulario (debe ser en php no html plano) comprobas si el codigo ingresado por el usuario en el campo corresponde al de la imagen (almacenado en  $_SESSION['numeroaleatorio']).

Para insertar la imagen en una pagina:

Código:
<img src="imagen_anti_ataque.php" />

Cyaz


Título: Re: Proteger login contra bruteforcers
Publicado por: pedrox@ en 27 Febrero 2009, 01:33 am
Sí, captcha ya he usado. Pero es algo engorroso que los usuarios tengan que estar escribiendo letrillas. Me dijeron que con un input hidden se podría hacer, estuve haciendo pruebas y no consegui nada jeje.

Un saludo, gracias


Título: Re: Proteger login contra bruteforcers
Publicado por: HardieVon en 27 Febrero 2009, 04:06 am
yu lo as dicho, guarda la ip con muchos logins fallidos, no seria optimo tu sistema pero si seguro.

otra cosa seria con sesiones.


Título: Re: Proteger login contra bruteforcers
Publicado por: pedrox@ en 27 Febrero 2009, 21:24 pm
Si, lo del bloqueo IP ya lo hize para la administración  ;D
Quiero aprender más metodos para no tener que hacerlo en cualquier formulario...

Nose si alguien conoce lo que digo del <input type="hidden" value="algo aleatorio">
Si me pueden echar una mano, gracias!


Título: Re: Proteger login contra bruteforcers
Publicado por: Spider-Net en 28 Febrero 2009, 00:23 am
Puedes crear una cookie que incremente su valor en cada logeo, si detectas un número alto de intentos de logeo fallidos entonces bloqueas la cuenta o baneas la ip o lo que sea. En caso de que el logeo sea correcto destruyes la cookie y ya está. Es un método...

Lo del campo oculto o (hidden) es sencillo. Creas un campo oculto en tu formulario de logeo con cualquier valor. Por ejemplo "ImPrEsCInDiBlE". Luego cuando envíes el formulario lo primero que tienes que hacer con los datos recibidos es comprobar si has recibido el contenido del campo oculto, si lo has recibido es que ha sido un logeo desde tu web, si no lo has recibido ha sido un script remoto.

El problema de este método es que es fácil de saltar, si usas un sniffer y capturas lo que envía el formulario o simplemente investigas el código fuente de tu página en busca de campos ocultos, aunque no se vean en el navegador, en el código fuente canta el: <input type="hidden"> así que no te lo recomiendo.

Saludos


Título: Re: Proteger login contra bruteforcers
Publicado por: [u]nsigned en 28 Febrero 2009, 01:12 am
El problema de este método es que es fácil de saltar, si usas un sniffer y capturas lo que envía el formulario o simplemente investigas el código fuente de tu página en busca de campos ocultos, aunque no se vean en el navegador, en el código fuente canta el: <input type="hidden"> así que no te lo recomiendo.

Lo de sniffers es todo un tema, en cuanto a lo del campo hidden lo puedes crear con DHTML accediendo al DOM, y asi no aparecera en el codigo fuente de tu web. Pero si en el  archivo .js.

Para mi lo mas factibles es lo de captcha debido a que el control se realiza en el server, y no gasta recusos como usar una base de datos, en cuanto o lo de cookies y sessiones se pueden manejar desde el cliente, es decir que con solo re abrir el navegador se borra la session.


Título: Re: Proteger login contra bruteforcers
Publicado por: HardieVon en 28 Febrero 2009, 07:55 am
lo mas viable es un campo oculto creado con una sesion por que lo de las cookies jajaja nada mas le dejas la cabecera congelada y es como si nada pasara.


Título: Re: Proteger login contra bruteforcers
Publicado por: Spider-Net en 28 Febrero 2009, 12:43 pm
Obviamente cualquier cosa que funcione desde el lado del cliente se lo van a poder saltar. Pero eso no sólo pasa con las aplicaciones web. Cualquier programa que se encuentre de forma local en mi ordenador puedo acceder a sus variables en memoria y modificarlas a mi gusto.

La única solución segura es trabajar siempre del lado del servidor, con una base de datos o un fichero o lo que sea pero que el usuario no tenga acceso.


Título: Re: Proteger login contra bruteforcers
Publicado por: naderST en 28 Febrero 2009, 18:15 pm
Obviamente cualquier cosa que funcione desde el lado del cliente se lo van a poder saltar. Pero eso no sólo pasa con las aplicaciones web. Cualquier programa que se encuentre de forma local en mi ordenador puedo acceder a sus variables en memoria y modificarlas a mi gusto.

La única solución segura es trabajar siempre del lado del servidor, con una base de datos o un fichero o lo que sea pero que el usuario no tenga acceso.

Y tiene razon Spider-Net, amigo lo que te recomendaria seria usar una base de datos, todo lo que sea del lado del cliente sera "violable" por decirlo asi.


Título: Re: Proteger login contra bruteforcers
Publicado por: [u]nsigned en 1 Marzo 2009, 02:16 am
... lo que te recomendaria seria usar una base de datos, todo lo que sea del lado del cliente sera "violable" por decirlo así.

Para mi con captcha alzanza, yo estuve tratando de violar este metodo y no se me ocurrio nada simple. Es decir el atacante nesesitaria un script o lo que sea capas de identificar caracteres en una imagen...y eso no es algo que se vea todo los dias... ;D


Título: Re: Proteger login contra bruteforcers
Publicado por: Spider-Net en 1 Marzo 2009, 13:00 pm
http://www.google.es/search?hl=es&q=break+captcha&btnG=Buscar&meta=

No creas que es tan difícil si buscas un rato por internet. Hay sitios donde explican paso a paso como romper un captcha, pero bueno al menos sabes que cualquiera no podrá saltárselo.

Saludos.


Título: Re: Proteger login contra bruteforcers
Publicado por: naderST en 1 Marzo 2009, 20:14 pm
... lo que te recomendaria seria usar una base de datos, todo lo que sea del lado del cliente sera "violable" por decirlo así.

Para mi con captcha alzanza, yo estuve tratando de violar este metodo y no se me ocurrio nada simple. Es decir el atacante nesesitaria un script o lo que sea capas de identificar caracteres en una imagen...y eso no es algo que se vea todo los dias... ;D

Si con el captcha estaria bien, bueno ya tiene varias opciones para escojer  ::)


Título: Re: Proteger login contra bruteforcers
Publicado por: pedrox@ en 2 Marzo 2009, 01:45 am
Como hariais lo del campo oculto con una sesion?

Saludos y gracias por las respuestas.


Título: Re: Proteger login contra bruteforcers
Publicado por: naderST en 2 Marzo 2009, 21:16 pm
Como hariais lo del campo oculto con una sesion?

Saludos y gracias por las respuestas.

mmm imagino que sería creando una session llamada intentos por ejemplo... y cada intento fallido modificas la session y si por ej la session ya es 5 baneas la ip o algo asi xD que se yo hay tantas maneras!


Título: Re: Proteger login contra bruteforcers
Publicado por: Karman en 3 Marzo 2009, 02:17 am
utiliza el método de número aleatorio + sesión... cada ves que un usuario descarga tu formulario imprime en el un número aleatorio cifrado con md5 y guarda dicho número en una variable de sesión, cuando se envían los datos cifra el que tienes en sesión y tiene que ser igual al del formulario, si intenta clonar el formulario, nunca va a poder saber cual es el número que el código espera, ese es el método que utilizan la mayoría de los cms...

S2