Comment installer ReCaptcha ?

Réponses rédigées par Antoine
Dernière mise à jour : 2018-08-27 16:24:19
Thèmes : php - script - webmaster - recaptcha - google
Question

Comment installer le Captcha ReCaptcha de Google sur mon site pour protéger un formulaire ?

Réponse

Comment installer ReCaptcha v2

La version du reCaptcha v2 de Google, dont voici une démo, date de décembre 2014. Elle évite à l'internaute d'avoir à taper des caractères ou des chiffres : il n'a plus qu'à cliquer sur une case.

Remarque : Ce système utilise une intelligence artificielle qui détecte s'il s'agit bien d'un clic fait par un humain et si c'est bien le cas, le CAPTCHA est validé.

Pour installer ReCaptcha, la première étape consiste à inscrire son site sur le service reCaptcha de Google.

Vous obtiendrez alors deux clefs fournies par le service.

  • Une clé publique : ou “clé du site”, à intégrer dans votre code HTML
  • Une clé privée : ou “clé secrète” qui comme son nom l'indique doit rester secrète

Vous aurez ensuite besoin de la librairie reCaptcha pour PHP disponible soit sur https://code.google.com/archive/p/recaptcha/downloads ou directement depuis ce lien.

Vous aurez également besoin de faire appel au code JavaScript fourni par Google pour installer ReCaptcha, le code est à insérer entre les balises HEAD.

<script src='https://www.google.com/recaptcha/api.js'></script>

L'affichage de votre formulaire PHP avec reCaptcha se fait de la manière suivante :

Remarque : Dans cet exemple le nom du fichier est test.php

<?php
require 'recaptcha.php';
$clef_publique = 'XXXXXXXX';
$clef_secrete = 'XXXXXXXX';
?>
<html>
<head>
<title>Page de test</title>
<script src="https://www.google.com/recaptcha/api.js"></script>
</head>
<body>
<?php
$reCaptcha = new ReCaptcha($clef_secrete);
if(isset($_POST["g-recaptcha-response"])) {
    $resp = $reCaptcha->verifyResponse(
        $_SERVER["REMOTE_ADDR"],
        $_POST["g-recaptcha-response"]
        );
    if ($resp != null && $resp->success) {echo "CAPTCHA correct";}
    else {echo "CAPTCHA incorrect";}
    }
?>
<form action="test.php" method="POST">
<div class="g-recaptcha" data-sitekey="<?php echo $clef_publique;?>"></div>
<input type="submit" value="Envoyer">
</form>
</body>
</html>
Réponse

Comment installer ReCaptcha v3

Suivez les mêmes instructions que pour la version 2 pour vous enregistrer, et obtenir les clés secrète et publique.

Voici comment installer ReCaptcha v3 sur un formulaire PHP :

<?php
$clef_secret = "xxxxxxxxxx";
$clef_public = "yyyyyyyyyyy";
?>

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Google reCAPTCHA v3</title>
<script src="https://www.google.com/recaptcha/api.js?render=<?php echo $clef_public;?>"></script>
<script>
grecaptcha.ready(function () {
	grecaptcha.execute('<?php echo $clef_public;?>', { action: 'contact' }).then(function (token) {
		var recaptcha = document.getElementById('recaptcha');
		recaptcha.value = token;
	});
});
</script>
</head>
<body>
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['recaptcha'])) 
{
	$recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify';
	$recaptcha_response = $_POST['recaptcha'];
	$recaptcha = file_get_contents($recaptcha_url . '?secret=' . $clef_secret . '&response=' . $recaptcha_response);
	$recaptcha = json_decode($recaptcha);
	if (@$recaptcha->score >= 0.5) 
	{
	echo "succès";
	} 
	else 
	{
	echo "échec";
	}
} 
?>
<form method="POST">
<input type="hidden" name="recaptcha" id="recaptcha">
<button type="submit">Envoyer</button>
</form>
</body>
</html>

Remarque : ReCaptcha v3 renvoie un score entre 0.0 et 1.0. Plus le score est bas plus il s'agit potentiellement d'un bot. 0.5 semble être un bon compromis.

Vous trouverez d'avantage d'information sur ReCaptcha v3 via cette page de Google.