Utilizar reCAPTCHA v3 para evitar intentos de fuerza bruta

Una medida mas contra los intentos de fuerza bruta

Publicado por AlbertoBSD el 2019-12-10 23:02:48

Si bien es bueno el tener la ayuda de google para evitar ataques por fuerza bruta en un formulario de Login o de comentarios

No debe de ser la unica solucion, el backend tiene que estar bien programado y asegurar todos los vectores de ataques posibles

He programado el login de mi pagina inplementado la version 3 de recaptcha y posteriormente tambien implementare el mismo sistema para la publicacion de comentarios

Considerando que tengo los demas intentos de ataques XSS, SQLi entre otros cubiertos, solo me queda que el factor de Fuerza el cual estara a cargo de Google

Como implementarlo en tu pagina

  • Registrar tu pagina en la pagina de reCAPTCHA
  • Implementarlo en el Front End
  • Implementarlo en el Back End

Como implementar reCAPTCHA v3 en el FrontEnd: Javascript

Para implementarlo en el Front End se tiene que incluir el Token devuelto por google en el formulario donde se envian tus datos hacia el servidor, ejemplo:

		grecaptcha.ready(function() {
			grecaptcha.execute('SITE KEY HERE, THIS VALUE IS PUBLIC', {action: '/login'}).then(function(token) {
				$.ajax({
					type: "POST",
					url: "/path/to/form/backend/",
					data: {	
						...//mas datos
						action: "/login",
						reCAPTCHA_Token: token,
					},
					success: function( data, textStatus, jQxhr ){
						...
					},
					error: function( jqXhr, textStatus, errorThrown ){
						...
					}
				});	
			});
		});

Como implementar reCAPTCHA v3 en el BackEnd: PHP

En el backend adicional a las validaciones de seguridad que ya realices, se tiene que enviar el token a google asi como la IP de origen de la peticion Google devolvera la respuesta en JSON con un score actual del usuario. Segun la documentacion de google solo scores por encima de 0.5 deberia de ser procesados. Incluso para operaciones mas sencibles, Logins, pagos con tarjeta etc deberia de utilizarse solo Scores mayores a 0.7

Ejemplo en PHP para procesar la validacion reCAPTCHA

<?php
try {
	//Validar datos POST or GET aqui.
	$post_data = http_build_query(
		array(
				'secret' => "SECRET KEY HERE THIS VALUE MUST BE PRIVATE...",
				'response' => $_POST['reCAPTCHA_Token'],//Token devuelto por Google al Front End y enviado a este formulario
				'remoteip' => $_SERVER['REMOTE_ADDR'] //Direccion IP publica del cliente que envia el formulario
		)
	);
	$opts = array('http' =>
		array(
		'method'  => 'POST',
		'header'  => 'Content-type: application/x-www-form-urlencoded',
		'content' => $post_data
		)
	);
	$context  = stream_context_create($opts);
	$response = file_get_contents('https://www.google.com/recaptcha/api/siteverify', false, $context);	
	$result = json_decode($response);
	if($result->action != $_POST["action"])	{
		throw new Exception("Google recaptcha action missmatch");
	}
	if($result->score < 0.5)	{
		throw new Exception("Google recaptcha score too low");
	}
	//Devuelta a las validaciones actuales de seguridad para los datos recibidos 
}catch(Exception $e) {
	//catch exception here
}
?>

Como resultado final se puede ver el logotipo de reCAPTCHA en la esquina inferior derecha de la pagina

Saludos!