Formulaire, spam et recaptcha…

Attention:  cet article date du 22 octobre 2012
Ce qu'il contient est peut être encore valable...
... ou complètement obsolète!

Dès que nous avons un formulaire sur un site (commentaires, demande d’info, abonnement à une newsletter…) il est inévitable que tôt ou tard les spammeurs s’y attaqueront. Et vous recevrez des messages dans des langues étranges, tantôt anglais, tantôt traductions pleines de fautes et de caractères inconnus, avec des liens vers des sites non recommandables.

Si vous modérez à postériori (conseil du jour), c’est un moindre mal. Mais devoir supprimer une vingtaine de messages par jour est tout de même pénible (parfois plus).

Une des solutions: mettre en place un captcha.

Petit tuto pour l’usage de ReCaptcha, service phare de Google.

Un Captcha ?

Pour mémoire, le captcha est un moyen de protéger un formulaire des robots spammeurs en posant une question (simple) à l’internaute, qui est refoulé s’il se trompe.

La question pouvant être une devinette (la couleur du cheval blanc d’Henri IV) ou un calcul  simple (combien font 1+3) ou, le plus souvent, une reconnaissance de texte déformé.

Voir mon article Captcha, koi-c-ça ? sur PasswordFinder.

Pourquoi passer par la solution Google ?

J’ai été longtemps adepte du captcha fait main, un petit script qui propose quelques lettres (non déformée) et les affiche avec pour l’internaute de les saisir à la main. Longtemps, cela a protégé mes sites efficacement.

Mais une nouvelle forme de spam de formulaire a fait son apparition, qui ne se base plus sur des robots mais sur des êtres humains. Ces individus surfent et à coup de copié/collé (ou d’outils plus élaborés) remplissent des formulaires saisissant les captchas trop simples. Parait-il que c’est moins couteux et plus efficace que des robots spammeurs (on peut s’interroger sur le salaire de misère que cela génère pour eux, mais ce n’est pas le propos).

Des captchas plus solides sont donc obligatoires pour se préserver, et autant faire appel au leader…

Voulant mettre en place ReCaptcha pour un site, autant en faire un tuto pour les prochaines fois (et pour vous, chers lecteurs).

Récupérer la clef et le code

La première consiste à s’inscrire sur le site de Google. Vous devez avoir un compte Google pour ce faire, et vous y connecter.

Ensuite il vous sera demandé pour quel site vous voulez une clef d’activation, ou si vous en voulez une pour l’ensemble de vos sites (ce qui simplifiera le copié/collé), ce que je fais.

Vous obtenez alors 2 clefs, une pour la partie client (Javascript), l’autre pour la partie serveur (PHP dans notre cas). La première sera publique mais conservez l’autre secrète.

Ensuite, l’on va télécharger un petit bout de script sur le site de Google, à placer côté serveur. Cela existe pour différent langages (PHP, C, Java…), y compris des plugins WordPress. En l’occurrence, dans le Zip se trouvent plusieurs exemples, des fichiers de licence à lire, et un fichier recaptchalib.php à mettre sur votre serveur.

Mettre en place

Sans trop de surprise, vous avez deux morceaux de codes à mettre en place: un côté client, l’autre côté serveur.

Côté client, c’est à dire l’endroit qui affiche le formulaire, voici:

require_once('recaptchalib.php');
define("RECAPTCHA_PUBLIC", "6LeXXXXXXXXXXXXXXXXXXX6qZ");
echo recaptcha_get_html(RECAPTCHA_PUBLIC);

La dernière ligne sera à placer entre les balises <form> et </form> de votre formulaire, à l’endroit où vous voulez afficher le Captcha. En remplaçant bien sûr la clef publique par la votre!

Côté serveur, c’est à dire l’endroit qui gère la validation du formulaire, voici:

require_once("recaptchalib.php");
define("RECAPTCHA_PRIVEE", "6LeYYYYYYYYYYYYYYYYYYY-_l");
$resp = recaptcha_check_answer (RECAPTCHA_PRIVEE,
                           $_SERVER["REMOTE_ADDR"],
                           $_POST["recaptcha_challenge_field"],
                           $_POST["recaptcha_response_field"]);

Remplacez également la clef, par la privée ce coup ci.

La variable $resp est un objet, qui contient entre autre la réponse, un booléen (vrai ou faux). Ne reste plus qu’à effectuer un test sur cette réponse:

if ($resp->is_valid == false) {
     // Erreur: le Captcha est faux... Afficher un message...
} else {
     // Tout va bien, le Captcha est bon, on passe à la suite...
}

Je vous laisse le soin d’adapter cela à vos besoins précis.

Pour une meilleur gestion, je vous conseille de regrouper les 3 lignes de configuration dans un fichier de… de configuration (connect par exemple….)

require_once('recaptchalib.php');
define("RECAPTCHA_PUBLIC", "6LeXXXXXXXXXXXXXXXXXXX6qZ");
define("RECAPTCHA_PRIVEE", "6LeYYYYYYYYYYYYYYYYYYY-_l");

Ne pas hésiter à lire la documentation (en anglais) et les exemples livrés avec.

Personnalisation

On peut personnaliser le Captcha assez facilement. Par exemple, choisir un thème standard pour choisir la couleur parmi les 3 ou 4 proposés. Vous pouvez aussi créer votre CSS de toutes pièces, chaque zone du Captcha possédant des class facilement utilisable.

Et voilà…

Ne reste plus qu’à appliquer sur les différents formulaires, voire les différents sites, et surveiller à l’usage si le taux de spam baisse ou non…

2 réponses pour “Formulaire, spam et recaptcha…”

  1. Gégé a dit:

    Bonjour,
    J\’ai bien lu votre page mais désolé mais beaucoup de programmeurs très compétents restent dans leur monde (jargon informatique) pensant que tout le monde doit comprendre.
    il se trouve que j\’ai bien lu le chemin à réaliser.
    Mais à chaque fois on ne trouve jamais la faon simple d\’explication.
    exemple :
    votre page formulaire
    form.php ( vous devez insérer ceci )
    vous devez aussi créer ce fichier recaptchalib.php
    et vous devez y enregistrer ceci :
    etc.
    De cette façon, l\’explication devient non seulement plus simple mais plus compréhensible pour les idiots du web que nous sommes les amateurs du web mais au bord de la retraite..
    Tout cela pour vous dire, que je n\’ai pas réussi à reproduire votre script qui m\’aurait été très utiles contre les spammeurs..
    Espérant, peut-être trouver un complément d\’information de façon méthodique…..
    Cordialement,

    • R. Carlier a dit:

      Bonjour

      Hélas, le problème est que mon article (pas à pas pourtant) date de 2012, et nous sommes en 2019 ; entre temps, Google a changé la façon de procéder pour mettre en place le Captcha, et mon mode d’emploi ne fonctionne tout simplement plus.

Laisser une réponse

Catégories

Archives