Antispam pour les commentaires de blog : un Captcha sans images
Par Damien Ravé - Le Caphar, jeudi 6 mars 2008 à 23:11 :: Webdesign :: #112 :: rss
Les spams dans les commentaires de blogs sont une plaie. Divers tests de Turing (aussi appelés Captchas) visent à séparer les robots des êtres humains, allant de l'image plus ou moins lisible au questions les plus absconses (« quel est le troisième chiffre dans la chaîne 012345 (en chiffres) ? »). Voici une méthode, simple et, d'après mon expérience, plutôt efficace pour tromper les spammeurs. Explications.
Le principe : un bloc de texte anodin
Le principe est simple : afficher une suite de caractères, comme ci dessous :
<style>
#yzzera {
font-size:3em;
margin:1em;
text-align:center;
}
</style>
<div id="yzzera">AHKIPO8</div>
Il s'agit d'un simple div dont la taille a été agrandie pour qu'il soit facilement identifiable par les visiteurs de votre blog. Pour s'assurer qu'un robot ne puisse pas détecter qu'il s'agit d'un Captcha, on lui attribue un id généré aléatoirement, et l'on définit son style dans la page. Si vous ne pouvez pas modifier l'en-tête de la page pour inclure la balise <style>, vous pouvez spécifier directement le formatage avec l'attribut style="font-size:3em", mais c'est moins propre.
Comment générer les codes aléatoires ?
Personnellement, j'utilise des fonctions très basiques de génération de code aléatoire :
function consonne()
{
$consonnes = "bcdfghjklmnpqrstvwxz";
return $consonnes[rand(0,strlen($consonnes) - 1)];
}
function voyelle()
{
$voyelles = "aeiouy";
return $voyelles[rand(0,strlen($voyelles) - 1)];
}
// Je génère le nom du DIV
$captcha_div = voyelle() . consonne() . consonne() . voyelle() . consonne() . voyelle();
// Je génère le captcha
$captcha = strtoupper(voyelle() . consonne() . consonne() . voyelle() . consonne() . voyelle()) . rand(0,9);
Valider le tout
Pour vérifier que le Captcha a été correctement saisi par le visiteur, il faut que le formulaire comprenne au moins deux champs :
- le champ de saisie pour le visiteur :
<input type="text" name="saisie_utilisateur"> - un champ invisible, comportant une version "hachée" du Captcha : une simple fonction md5() suffira à rendre le code indéchiffrable. On aura donc un champ de ce type :
<input type="hidden" name="hachage_code" value="<?php print md5($captcha); ?>">
A la validation du formulaire côté serveur, la saisie du visiteur sera à son tour passée à la moulinette du md5() et comparée à la valeur $_POST['hachage_code']. Si elle est identique, c'est que le visiteur a correctement recopié le code. Et hop, le commentaire est enregistré ! Si elle est différente, c'est que le visiteur n'a pas recopié le code convenablement. Il faudra donc réafficher le formulaire en reprenant toute la saisie du visiteur, et générer un nouveau code aléatoire, qui sera vérifié après une nouvelle validation, etc.
Renforcer la protection
Si l'algorithme de vos spammeurs est très malin, on peut renforcer la difficulté en ajoutant des <span> autour de chaque caractère. Sur des sites de taille raisonnable, les techniques des spammeurs ne sont pas très élaborées. Je recommande quand même de compléter cette barrière par un filtre antispam par mots-clés qui met en attente de validation les commentaires comportant certains caractères. D'autres techniques existent, notamment les systèmes de scoring, mais ils sont plus complexes à mettre en place.
Vos retours
Cette méthode est en cours d'expérimentation sur un des sites que j'administre. Je n'ai pas encore pris le temps de développer un plugin pour blogs, ma version de Dotclear étant vieillissante. Si vous la mettez en œuvre avec succès, faites-moi signe. Si c'est un échec complet, vos retours sont intéressants aussi. Et si vous avez des suggestions d'améliorations, c'est encore mieux. A votre bon cœur, messieurs dames...
A lire sur le même thème
Articles les plus lus
- Tendances Web 2007 : 60 palettes de couleur élégantes pour vos sites Web
- Tout ce qu'il faut savoir sur le PageRank Google (traduit de l'anglais)
- 7 pratiques Javascript qui changent la vie
- Planète Bosphore
- Quelle est la meilleure architecture pour votre site Web ?
- 10 fonctions PHP-MySQL que j'utilise tous les jours


Commentaires
1. Le vendredi 7 mars 2008 à 00:17, par André- Antispam pour les commentaires de blog : un Captcha sans images
André a posté 1 commentaire dans les articles suivants :
2. Le samedi 8 mars 2008 à 06:33, par Pierre-Marie- Antispam pour les commentaires de blog : un Captcha sans images
Pierre-Marie a posté 1 commentaire dans les articles suivants :
3. Le dimanche 16 mars 2008 à 01:20, par Raton- Comment référencer un site professionnel sur Google : oubliez les meta tags
- Dix ans après, le Web sert toujours à se regarder le nombril
- Antispam pour les commentaires de blog : un Captcha sans images
- 10 fonctions PHP-MySQL que j'utilise tous les jours
- Vers un développement Web durable
- La bonne taille de texte en CSS (How to size text using ems | clagnut/blog)
- Tutorial MySQL : alléger des requêtes successives avec CREATE TEMPORARY TABLE
Raton a posté 7 commentaires dans les articles suivants :
4. Le mardi 18 mars 2008 à 07:43, par Damien Ravé - Le Caphar- Le retour des tables via CSS (la guerre est finie)
- Jeu en ligne Terato : des nouveautés à la pelle
- Antisociaux : les 10 pires profils pour les réseaux sociaux
- Développeurs : à quel âge serez-vous trop vieux ?
- Comment perdre vos clients grâce à un nouveau design : la parabole de la ligne 13
- Et toi tu fais quoi dans la vie ? (entretien avec un webdesigner)
- Yahoo UI vs JQuery : quel framework Javascript pour vos applications Web 2.0 ?
- Vous voulez survivre ? Soyez un filtre.
- Comment référencer un site professionnel sur Google : oubliez les meta tags
- Quel est votre manque-à-bloguer ? (encore une chaîne de blogs !)
- Tutoriel : créez une FAQ accessible et facile à mettre à jour avec JQuery
- Tutoriel PHP : pourquoi passer au développement orienté objet ?
- Stats du blog en juin : 11000 visiteurs, 36000 pages vues, et... 11,19 dollars de recettes publicitaires
- 10 choses que les femmes attendent des hommes d'aujourd'hui
- Nouveau design enrichi : le Potlatch prend le large
- Le marketing est un humanisme
- Carla Bruni nue : que fait Sarkozy ?
- Dix ans après, le Web sert toujours à se regarder le nombril
- Antispam pour les commentaires de blog : un Captcha sans images
- 10 fonctions PHP-MySQL que j'utilise tous les jours
- Des tableaux de données simples, standards et lisibles en CSS et PHP
- Planète Djemma el'Fna
- Tendances Web 2007 : 60 palettes de couleur élégantes pour vos sites Web
- Développeurs Web : c'est le moment de demander une augmentation
- Vos utilisateurs buggent ? Quelques pièges à éviter dans vos applications en ligne
- Quelle est la meilleure architecture pour votre site Web ?
- 7 pratiques Javascript qui changent la vie
- Planète Bosphore
- Astuce PHP : afficher ou masquer le "s" de résultat(s) en une ligne
- Sarkozy ou le retour de la peine de mort dans l'oeuf
- Nouvelle affiche de campagne de Nicolas Sarkozy
- Tutorial PHP : chronométrer le temps de calcul des requêtes SQL (benchmark)
- Démago ou l'urgence médiatique
- 10 fonctions PHP-MySQL que j'utilise tous les jours
- Pour la triche à l'école (anglais)
- 10 fonctions PHP-MySQL que j'utilise tous les jours
- Je veux être une star underground - 1. l'artiste est un grand malade
- Ceux qui ne veulent pas de Sarkozy comme président
Damien Ravé - Le Caphar a posté 38 commentaires dans les articles suivants :
5. Le dimanche 30 mars 2008 à 16:53, par Sylvain- Antispam pour les commentaires de blog : un Captcha sans images
Sylvain a posté 1 commentaire dans les articles suivants :
6. Le lundi 31 mars 2008 à 18:35, par Raton- Comment référencer un site professionnel sur Google : oubliez les meta tags
- Dix ans après, le Web sert toujours à se regarder le nombril
- Antispam pour les commentaires de blog : un Captcha sans images
- 10 fonctions PHP-MySQL que j'utilise tous les jours
- Vers un développement Web durable
- La bonne taille de texte en CSS (How to size text using ems | clagnut/blog)
- Tutorial MySQL : alléger des requêtes successives avec CREATE TEMPORARY TABLE
Raton a posté 7 commentaires dans les articles suivants :
7. Le lundi 31 mars 2008 à 18:43, par Raton- Comment référencer un site professionnel sur Google : oubliez les meta tags
- Dix ans après, le Web sert toujours à se regarder le nombril
- Antispam pour les commentaires de blog : un Captcha sans images
- 10 fonctions PHP-MySQL que j'utilise tous les jours
- Vers un développement Web durable
- La bonne taille de texte en CSS (How to size text using ems | clagnut/blog)
- Tutorial MySQL : alléger des requêtes successives avec CREATE TEMPORARY TABLE
Raton a posté 7 commentaires dans les articles suivants :
8. Le samedi 5 juillet 2008 à 23:13, par Kijer- Antispam pour les commentaires de blog : un Captcha sans images
- Jeu en ligne : êtes-vous original ?
Kijer a posté 2 commentaires dans les articles suivants :
9. Le dimanche 6 juillet 2008 à 11:35, par Damien Ravé - Le Caphar- Le retour des tables via CSS (la guerre est finie)
- Jeu en ligne Terato : des nouveautés à la pelle
- Antisociaux : les 10 pires profils pour les réseaux sociaux
- Développeurs : à quel âge serez-vous trop vieux ?
- Comment perdre vos clients grâce à un nouveau design : la parabole de la ligne 13
- Et toi tu fais quoi dans la vie ? (entretien avec un webdesigner)
- Yahoo UI vs JQuery : quel framework Javascript pour vos applications Web 2.0 ?
- Vous voulez survivre ? Soyez un filtre.
- Comment référencer un site professionnel sur Google : oubliez les meta tags
- Quel est votre manque-à-bloguer ? (encore une chaîne de blogs !)
- Tutoriel : créez une FAQ accessible et facile à mettre à jour avec JQuery
- Tutoriel PHP : pourquoi passer au développement orienté objet ?
- Stats du blog en juin : 11000 visiteurs, 36000 pages vues, et... 11,19 dollars de recettes publicitaires
- 10 choses que les femmes attendent des hommes d'aujourd'hui
- Nouveau design enrichi : le Potlatch prend le large
- Le marketing est un humanisme
- Carla Bruni nue : que fait Sarkozy ?
- Dix ans après, le Web sert toujours à se regarder le nombril
- Antispam pour les commentaires de blog : un Captcha sans images
- 10 fonctions PHP-MySQL que j'utilise tous les jours
- Des tableaux de données simples, standards et lisibles en CSS et PHP
- Planète Djemma el'Fna
- Tendances Web 2007 : 60 palettes de couleur élégantes pour vos sites Web
- Développeurs Web : c'est le moment de demander une augmentation
- Vos utilisateurs buggent ? Quelques pièges à éviter dans vos applications en ligne
- Quelle est la meilleure architecture pour votre site Web ?
- 7 pratiques Javascript qui changent la vie
- Planète Bosphore
- Astuce PHP : afficher ou masquer le "s" de résultat(s) en une ligne
- Sarkozy ou le retour de la peine de mort dans l'oeuf
- Nouvelle affiche de campagne de Nicolas Sarkozy
- Tutorial PHP : chronométrer le temps de calcul des requêtes SQL (benchmark)
- Démago ou l'urgence médiatique
- 10 fonctions PHP-MySQL que j'utilise tous les jours
- Pour la triche à l'école (anglais)
- 10 fonctions PHP-MySQL que j'utilise tous les jours
- Je veux être une star underground - 1. l'artiste est un grand malade
- Ceux qui ne veulent pas de Sarkozy comme président
Damien Ravé - Le Caphar a posté 38 commentaires dans les articles suivants :
10. Le mardi 14 octobre 2008 à 10:43, par fabrice jacob- Antispam pour les commentaires de blog : un Captcha sans images
fabrice jacob a posté 1 commentaire dans les articles suivants :
Ajouter un commentaire