Consejo: Aprende inglés y busca documentación oficial antes que cualquier cosa.
https://developers.google.com/recaptcha/docs/v3
Hay 3 versiones como tu bien dices. Esta la V2 y la V3. De la V2 tienes 2 opciones:
- Que te salga el check siempre (y que Google decida si hacerle challange al usuario)
- QUe te salga el check y el challange solo cuando Google cree que debería hacerle challenge al usuario, esta última se clasifica como "Invisible".
La V3 es muy parecida a la V2, la diferencia principal es que usa IA y trabaja de forma constante desde que el usuario entra a tu página. En vez de retar o hacer cosas raras, lo que hace es analizar el comportamiento y dar una puntuación de 0 a 1. Normalmente, si está por debajo de 0.5, Google cree que el usuario no es un humano o que al menos huele mal.
Ambas versiones lo que hacen es dar un hash que tienes que pasarle a Google y Google a partir de ahí te dice lo que opina, se basa así:
Recaptcha genera un hash -> Tu recibes ese hash en el servidor -> Se lo mandas a Google -> Google te responde si es valido o no.
Para implementar el V3 en PHP es relativamente sencillo. Supongamos que tienes un formulario relativamente simple:
Si te fijas hay un campo hidden que se llama loginToken, ese es el que va a contener el token (hash) que te da el Recaptcha. Tienes que poblarlo y para hacerlo puedes hacer esto en javascript (recaptcha.js).
Así pues cuando se envíe el formulario, te va a pasar un token al servidor con el nombre loginToken. Ahora necesitas validarlo, en PHP capturas el token y se lo mandas a Google:
Lo he hecho todo un poco de memoria y sin probarlo pero debería funcionar. Pero, hazte caso y aprende inglés... es obligatorio para programar.
Saludos
https://developers.google.com/recaptcha/docs/v3
Hay 3 versiones como tu bien dices. Esta la V2 y la V3. De la V2 tienes 2 opciones:
- Que te salga el check siempre (y que Google decida si hacerle challange al usuario)
- QUe te salga el check y el challange solo cuando Google cree que debería hacerle challenge al usuario, esta última se clasifica como "Invisible".
La V3 es muy parecida a la V2, la diferencia principal es que usa IA y trabaja de forma constante desde que el usuario entra a tu página. En vez de retar o hacer cosas raras, lo que hace es analizar el comportamiento y dar una puntuación de 0 a 1. Normalmente, si está por debajo de 0.5, Google cree que el usuario no es un humano o que al menos huele mal.
Ambas versiones lo que hacen es dar un hash que tienes que pasarle a Google y Google a partir de ahí te dice lo que opina, se basa así:
Recaptcha genera un hash -> Tu recibes ese hash en el servidor -> Se lo mandas a Google -> Google te responde si es valido o no.
Para implementar el V3 en PHP es relativamente sencillo. Supongamos que tienes un formulario relativamente simple:
Código (html5) [Seleccionar]
<form action='' method='POST'>
<input type='text' name='user' placeholder='Usuario'>
<input type='password' name='pass' placeholder='Contraseña'>
<input type='hidden' name='loginToken' id='loginToken' value=''>
<button type='submit'>Entrar</button>
</form>
<script src='https://www.google.com/recaptcha/api.js?render=reCAPTCHA_site_key'></script>
<script src='recaptcha.js'></script>
Si te fijas hay un campo hidden que se llama loginToken, ese es el que va a contener el token (hash) que te da el Recaptcha. Tienes que poblarlo y para hacerlo puedes hacer esto en javascript (recaptcha.js).
Código (javascript) [Seleccionar]
// Cuando el recaptcha se haya cargado...
grecaptcha.ready(function() {
// Añadimos un evento que escucha para cuando se envie el formulario..
document.getElementById('loginForm').addEventListener('submit', function(e){
// Si se envia, sacamos el token asignandole de acion 'loginForm'
grecaptcha.execute('reCAPTCHA_site_key', {action: 'loginForm'}).then(function(token) {
// y ponemos el token en el campo invisible.
document.getElementById('loginToken').value = token;
});
});
});
Así pues cuando se envíe el formulario, te va a pasar un token al servidor con el nombre loginToken. Ahora necesitas validarlo, en PHP capturas el token y se lo mandas a Google:
Código (php) [Seleccionar]
<?php
define('RECAPTCHA_SECRET', 'blablabla');
define('RECAPTCHA_URL', 'https://www.google.com/recaptcha/api/siteverify');
function validateRecaptcha($token)
{
$data = array(
'secret' => RECAPTCHA_SECRET,
'response' => $token,
'remoteip' => $_SERVER['REMOTE_ADDR'] // este es opcional
);
// Hacemos la petición a Google
$curl = curl_init();
curl_setopt_array(
$curl,
array(
CURLOPT_URL => RECATPCHA_URL,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $data,
CURLOPT_RETURNTRANSFER => true
));
// Obtenemos la respuesta
$response = json_decode(curl_exec($curl));
// Si la respuesta esta vacia, o la respuesta no es positiva
if (empty($response) || empty($response->success)) {
return false;
}
// Obtenemos la puntuación y comprobamos si es menor a 0.5
$score = $response->score;
if ($score < 0.5) {
return false;
}
return true;
}
if (isset($_POST['user'], $_POST['password'], $_POST['loginToken'])) {
$token = (!empty($_POST['loginToken']) ? $_POST['loginToken'] : '');
if (!validateRecaptcha($token)) {
die('El captcha no es valido');
}
// Resto del codigo.
}
Lo he hecho todo un poco de memoria y sin probarlo pero debería funcionar. Pero, hazte caso y aprende inglés... es obligatorio para programar.
Saludos