Autor
|
Tema: Proteger login contra bruteforcers (Leído 6,561 veces)
|
pedrox@
Desconectado
Mensajes: 48
|
Hola buenas! Bueno estaba haciendo un login para mi web con php, mysql. Bueno por ejemplo: <form action="/index.php" method="post"> <input type="text" name="usuario" value="Nombre usuario" onClick="this.value=''"> <input type="password" name="clave" value="Password" onClick="this.value=''"> <input type="submit" name="enviar" value="Enviar">
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...
|
|
|
En línea
|
|
|
|
[u]nsigned
Desconectado
Mensajes: 2.397
JS/Node developer
|
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 <?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: <img src="imagen_anti_ataque.php" /> Cyaz
|
|
|
En línea
|
No hay atajo ante la duda, el misterio se hace aquí... Se hace carne en cada uno, el misterio es existir!
|
|
|
pedrox@
Desconectado
Mensajes: 48
|
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
|
|
|
En línea
|
|
|
|
HardieVon
Desconectado
Mensajes: 181
Programming HardCore
|
yu lo as dicho, guarda la ip con muchos logins fallidos, no seria optimo tu sistema pero si seguro.
otra cosa seria con sesiones.
|
|
|
En línea
|
|
|
|
pedrox@
Desconectado
Mensajes: 48
|
Si, lo del bloqueo IP ya lo hize para la administración 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!
|
|
|
En línea
|
|
|
|
Spider-Net
Desconectado
Mensajes: 1.165
Un gran poder conlleva una gran responsabilidad
|
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
|
|
« Última modificación: 28 Febrero 2009, 00:25 am por Spider-Net »
|
En línea
|
|
|
|
[u]nsigned
Desconectado
Mensajes: 2.397
JS/Node developer
|
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.
|
|
|
En línea
|
No hay atajo ante la duda, el misterio se hace aquí... Se hace carne en cada uno, el misterio es existir!
|
|
|
HardieVon
Desconectado
Mensajes: 181
Programming HardCore
|
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.
|
|
|
En línea
|
|
|
|
Spider-Net
Desconectado
Mensajes: 1.165
Un gran poder conlleva una gran responsabilidad
|
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.
|
|
|
En línea
|
|
|
|
naderST
|
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.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Proteger archivos contra copias
Seguridad
|
bugzzy
|
7
|
43,101
|
20 Agosto 2012, 06:20 am
por TRIPLEX27
|
|
|
proteger móvil 5800 contra hacker
Hacking Mobile
|
adolfrm
|
0
|
3,033
|
7 Diciembre 2011, 17:48 pm
por adolfrm
|
|
|
[DUDA]Proteger contra exploits un equipo con Linux instalado
Seguridad
|
Sp3ctr3
|
4
|
3,394
|
12 Junio 2012, 00:44 am
por Pablo Videla
|
|
|
Login PHP contra un fichero txt
Desarrollo Web
|
Oshrik
|
3
|
2,132
|
28 Diciembre 2012, 18:47 pm
por Oshrik
|
|
|
Proteger archivo contra copia
Seguridad
|
benQ1
|
1
|
6,383
|
5 Enero 2014, 02:04 am
por .:UND3R:.
|
|