Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: AlbertoBSD en 11 Diciembre 2019, 02:04 am



Título: Utilizar reCAPTCHA v3 para evitar intentos de fuerza bruta
Publicado por: AlbertoBSD en 11 Diciembre 2019, 02:04 am
Fuente Utilizar reCAPTCHA v3 para evitar intentos de fuerza bruta (https://albertobsd.dev/blog/es/2019/12/utilizar-recaptcha-v3-para-evitar-intentos-de-fuerza-bruta/)

En el Post que acabo de publicar básicamente se muestra el código en javascript y en PHP para implementar el reCAPTCHA v3 en un Formulario para evitar ataques de fuerza bruta.

Codigo en PHP:

Código
  1. <?php
  2. try {
  3.  //Validar datos POST or GET aqui.
  4.  $post_data = http_build_query(
  5.    array(
  6.        'secret' => "SECRET KEY HERE THIS VALUE MUST BE PRIVATE...",
  7.        'response' => $_POST['reCAPTCHA_Token'],//Token devuelto por Google al Front End y enviado a este formulario
  8.        'remoteip' => $_SERVER['REMOTE_ADDR'] //Direccion IP publica del cliente que envia el formulario
  9.    )
  10.  );
  11.  $opts = array('http' =>
  12.    array(
  13.    'method'  => 'POST',
  14.    'header'  => 'Content-type: application/x-www-form-urlencoded',
  15.    'content' => $post_data
  16.    )
  17.  );
  18.  $context  = stream_context_create($opts);
  19.  $response = file_get_contents('https://www.google.com/recaptcha/api/siteverify', false, $context);
  20.  $result = json_decode($response);
  21.  if($result->action != $_POST["action"]) {
  22.    throw new Exception("Google recaptcha action missmatch");
  23.  }
  24.  if($result->score < 0.5) {
  25.    throw new Exception("Google recaptcha score too low");
  26.  }
  27.  //Devuelta a las validaciones actuales de seguridad para los datos recibidos
  28. }catch(Exception $e) {
  29.  //catch exception here
  30. }
  31. ?>

saludos!


Título: Re: Utilizar reCAPTCHA v3 para evitar intentos de fuerza bruta
Publicado por: @XSStringManolo en 11 Diciembre 2019, 11:09 am
Se ve chula la web. El color de la fuente con el fondo blanco es muy cómodo de leer.

Puede ser que falle el código si el visitante utiliza un proxy no transparente con una IP y en la cabecera forwarded la del cliente? Igual interesa comprobar si ambas coinciden, y de no ser así, comprobar si la ip es de un dominio relacionado con servicios de proxy, hosting o eso.



Título: Re: Utilizar reCAPTCHA v3 para evitar intentos de fuerza bruta
Publicado por: AlbertoBSD en 11 Diciembre 2019, 21:32 pm
Se ve chula la web. El color de la fuente con el fondo blanco es muy cómodo de leer.

Jajaja utilice la primera plantilla que me gusto solo le edapte el PHP en el backend


Puede ser que falle el código si el visitante utiliza un proxy no transparente con una IP y en la cabecera forwarded la del cliente?

Si el proxy funciona como debe (Sock 4 Sock 5 ) la IP debe de coincidir ya que tnato tu backend como el de google verian la misma IP, aunque dependiendo del proxy podria tener ya un score bajo en google, ahorita lo compruebo y posteo los resultados.

Ya realize la prubea con el proxy no arrojo error de las IP y tampoco me arrojo un Score bajo, incluso utilizando un navegador en modo incognito. Creo que el score te lo va ir bajando si tratas de abusar del formulario.

Saludos!


Título: Re: Utilizar reCAPTCHA v3 para evitar intentos de fuerza bruta
Publicado por: Leguim en 15 Diciembre 2019, 02:13 am
¿Quéeeeeeeeeeeee? ¿Se puede usar reCAPTCHA para archivos AJAX? ¿O entendí todo mal xD?

Es decir, digamos que tengo un sistema de comentarios con AJAX ¿Puedo validar cada envió con reCAPTCHA?

Algo parecido a un "timeline"

[TEMA]
[FORMULARIO DE COMENTARIO]

[OTRO TEMA]
[OTRO FORMULARIO DE COMENTARIO]

[OTRO TEMA MÁS]
[OTRO FORMULARIO DE COMENTARIO MÁS]

Los diferentes formularios se agregan de forma dinámica "foreach" usando PHP


Título: Re: Utilizar reCAPTCHA v3 para evitar intentos de fuerza bruta
Publicado por: AlbertoBSD en 15 Diciembre 2019, 02:47 am
Si, de hecho se puede validar muchas cosas de cada pagina, solo que si un mismo cliente hace mucha peticiones de recaptcha puede que le bajen el score, sin embargo tengo entendido que google "apreden" cual es el uso "normal" que se le da a cada pagina.

En el primer post aparece como usarlo en el back end

En el link que publique, viene los codigos para implementarlo de manera generica aqui ahora pego el script:

Código
  1.    grecaptcha.ready(function() {
  2.      grecaptcha.execute('SITE KEY HERE, THIS VALUE IS PUBLIC', {action: '/login'}).then(function(token) {
  3.        $.ajax({
  4.          type: "POST",
  5.          url: "/path/to/form/backend/",
  6.          data: {
  7.            ...//mas datos
  8.            action: "/login",
  9.            reCAPTCHA_Token: token,
  10.          },
  11.          success: function( data, textStatus, jQxhr ){
  12.            ...
  13.          },
  14.          error: function( jqXhr, textStatus, errorThrown ){
  15.            ...
  16.          }
  17.        });
  18.      });
  19.    });
  20.  

En teoria solo tendrias que modificar el action de cada llamada a grecaptcha.execute y el action que le mandas por ajax a tu sever, ya el servidor se tiene que validar que el action coincida tanto el que le mandas con ajax como el que responde google en el backend

podrias tener un action distinto para cada formulario distinto y validarlo del lado del server.

Saludos!


Título: Re: Utilizar reCAPTCHA v3 para evitar intentos de fuerza bruta
Publicado por: Leguim en 15 Diciembre 2019, 03:20 am
Interesante... yo uso la v2 ese que al darle click al captcha se verifica o te sale una tarea para completar. ¿Funcionara con este?


Título: Re: Utilizar reCAPTCHA v3 para evitar intentos de fuerza bruta
Publicado por: AlbertoBSD en 15 Diciembre 2019, 03:26 am
La v3 es totalmente transparente, el usuario no tiene que darle click a nada.