Seleccionar idioma:
Realizar Donación - Mods Premium - Portfolio



Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.
* Mini Mod para guardar log de bots que intentan y no logran registrarse
  Leído 3108 veces
* Viendo el foro
 0 Usuarios y 1 Visitante están viendo este foro.


*
Autor: mermelado
Sep 11 2014
Hola amigos:
Hace mucho que ni pregunto ni comparto nada con esta maravillosa comunidad.
Hoy quiero compartir un mod muy simple que he creado, pero creo que puede ser útil.
A estas alturas, todos tenemos nuestro foro protegido contra bots de un modo u otro, por ejemplo con alguna pregunta del estilo ¿eres humano?. Esto detiene el registro de casi todos los bots, pero ¿No sería interesante guardar un log con los nicks, passwords e IP's que han usado en sus fallidos intentos?. Esto podría ayudarnos a comprender su lógica para mejorar nuestra seguridad en un futuro e incluso poder banear sus ips con por ejemplo .htaccess y así evitar que puedan seguir intentándolo.

Hay que editar el archivo register.template.php (está en themes/default) y buscar esto:

Código: [Seleccionar]
// Any errors?
if (!empty($context['registration_errors']))
{
Y a continuación añadimos el siguiente código:
Código: [Seleccionar]
// Con esto guardamos en archivo los registros fallidos

// Hallamos la ip real
if(!empty($_SERVER['HTTP_CLIENT_IP'])) {
    $ipreal=$_SERVER['HTTP_CLIENT_IP'];
} elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ipreal=$_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
    $ipreal=$_SERVER['REMOTE_ADDR'];
}
// Hallamos el nick y el pass por post

$contrasenha = $_POST['passwrd1'];
$miembrouser = $_POST['user'];

// Abrimos, añadimos la info y cerramos el archivo 'archivolog.txt' y si no existe, es creado

$fp = fopen("archivolog.txt", "a+");
fputs($fp, "Nick: " . $miembrouser . "      Password: " . $contrasenha . "      IP: " . $ipreal . "      Registro completado: NO" ."\r\n\r\n");
fclose($fp);
// fin

El archivo 'archivolog.txt', por defecto se creará en el directorio del foro, pero esto no es más que un ejemplo, en mi caso le he dado una ruta dentro de un directorio protegido por contraseña y lo he renombrado a index.html, de este modo, puedo acceder al registro desde el propio navegador. pero como ya he dicho, esto es cosa de cada uno.
También cabe destacar que modificarlo para que guarde también los usuarios que se registran normalmente, no presenta mayor problema, pero por razones éticas, he preferido omitir esa parte del código.

Espero que sea de utilidad a alguno y un abrazo a todos.


« Última Modificación: Septiembre 11, 2014, 08:50:54 am por mermelado »



Muchas gracias por el aporte amigo, un placer tenerte nuevamente por aquí! +10




De nada amigo, es un placer colaborar aunque sea con aportaciones tan humildes. Por cierto, en pocas horas he capturado más de 10 intentos de bots, algunos han repetido en varias ocasiones, por lo que puede que fuese buena idea mejorar mi mod y hacer que después de repetirse la ip en el log una determinada cantidad de veces, la incluyese automaticamente como "deny from xxx.xxx.xxx.xxx" en un .htaccess

Yo por el momento ya lo estoy haciendo a mano. Otra idea que podría ser interesantes, sería hacer una lista entre todos de las IP's indeseables.
Saludos.





Muy interesante! lo probaré...

PD: se le podrá incluir que informe por qué falló el registro? suponte si es por captcha erroneo (que lo informe), no respondió pregunta (o puso una respuesta incorrecta, que la informe...)


« Última Modificación: Septiembre 11, 2014, 05:36:49 pm por luuuciano »




Bueno, en teoría se tiene que poder hacer que grabe el mismo error que te da el propio smf, simplemente habría que mirar que variable guarda ese error, mañana si tengo tiempo lo miro, a ver si se puede.
De todos modos, creo que los bots el tema capcha lo tienen muy superado, yo hasta que no puse dos simples preguntas en el registro, se me registraban a pares, en una semana más de 200 y mensajes publicados a montones y para colmo smf no permite borrar usuarios en masa, por lo que tuve que hacerlo desde la bd, pero las estadísticas quedaron alteradas.




Ajá, si... en realidad yo de curiosidad de saber qué ponen en las respuestas a preguntar por ej... o sea, mi idea no era que informe "falló en la respuesta" o "falló en el captcha", sino que muestre la palabra o caracteres que usaron (así como lo hace ahora con nick y clave)




En principio maravillosa idea y gran aporte... Felicitaciones por la iniciativa y el compartir con los demas..

Ahora llendo a codigos, digamos que se puede mejorar mucho aun... en principio podrias utilizar la variable de smf por defecto para la ip, asi te evitarias mucas comprobaciones...

En segundo lugar no creo que  sea buena idea la de poner la contraseña en el archivo log, muchos usuarios no saben como protejer una carpeta o archivo y dejando todo el listado en un txt cualquiera tiene acceso a el.... Supongamos que yo soy una persona que por x motivo me dio error al intentar registrarme, obviamente despues intentare registrarme nuevamente y pondre la misma contraseña.... Con lo cual vos ya dejaste vulnerable mi usuario al revelar una contraseña en un archivo log.

Con respecto a lo que luciano plantea, se puede hacer sin problema... despues de todo el captcha no es mas que un input que pasa datos por metodo post..




HOla HeRaCLeS:
como siempre es un placer contar con tu opinión y en este caso el comentario sobre las contraseñas ha sido crucial, pues reconozco que no me planteé esa posibilidad, en cualquier caso al que deje el archivo mal protegido y quiera evitar esa posibilidad, no tiene más que omitir esa parte del código.
En cuanto a usar la variable de smf para la ip, pues lo pensé, pero decidí no usarla por un motivo. Si no me equivoco, en esta linea está la parte del código que usa smf para detectar la ip:
'member_ip' => $_SERVER['REMOTE_ADDR'], 'member_ip2' => $_SERVER['BAN_CHECK_IP']));

Y leyendo por la red, vi que ese método pordía dar falsas ip's en usuarios que naveguen a través de proxis y que para minimizar esa falsa ip, proponían un código similar al que publico yo. En realidad no tengo ni idea si será cierto o no, pero por el poco código que era, pues decidí ponerlo. A lo de evitar muchas comprobaciones no sé a la que te refieres, pues en realidad mi código sólo se ejecuta en caso de error en el registro.
En cuanto a mejorarlo, estoy totalmente de acuerdo, en realidad mi pequeña aportación es más el transmitir una idea, que el código en si, pues evidentemente es de lo más básico y fácil de entender. Incluso se podría guardar todo eso en la bd, de hecho lo intenté, pero no hubo manera. Yo y las bases de datos no nos llevamos bien :D
luuuciano: ahora sí capto tu idea, pero yo sigo pensando que el capcha lo aciertan casi siempre y que se paran en lo que tengas después y supongo que dependiendo del método que uses, pues la variable a revisar será una u otra, yo voy a investigar donde se guarda en mi caso y posteo lo que aclare.

El error original, que ya sé que no es lo que pides, pero para el que le interese  está aquí:
Código: [Seleccionar]
foreach ($context['registration_errors'] as $error)
echo '
<li>', $error, '</li>';

            


« Última Modificación: Septiembre 12, 2014, 04:05:24 am por mermelado »




Se podría hacer que el log lo guarde un nivel arriba (o abajo, según se lo mire), eso haría que esté fuera de la parte pública... no?

PD: si, lo que planteaba de registrar captcha y etc, más interesante es el ETC... o sea, lo que intentan poner en preguntas lógicas agregadas... o será que simplemente lo dejan vacío?


« Última Modificación: Septiembre 12, 2014, 10:06:20 am por luuuciano »




Como dijiste muchas veces (Por no decir siempre) se conectan por proxy, y es ese proxy el que tendrias que banear, no la ip real ya que por mas que le pongas ban a la ip real al conectarce por proxy seguira ingresando..

Con respecto a tantas comprobaciones me referia a que podrias tener la ip del visitante solo usando $user_info['ip'] en lugar de todos los if elseif etc..

Código: [Seleccionar]
global $user_info;

$ipreal = $user_info['ip'];



Por cierto, smf si permite borrar usuarios en masa... en la administracion -> usuarios... ahi podes realizar una busqueda de los usuarios y seleccionar por medio de los checks los que queres eliminar




Otros temas de su interes




Usuario:
Contraseña:
Sesión:
hermes bracelet replica, christian louboutin replica, van cleef and arpels replica, red bottoms replica, cartier love bracelet replica christian louboutin replica, christian louboutin replica, hermes bracelet replica,