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
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 ){
...
}
});
});
});
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!