PluXml.org

Blog ou CMS à l'Xml

Vous n'êtes pas identifié(e).

#1 15/12/2011 23:25:15

Mordred
Membre
Inscription : 03/11/2011
Messages : 10

Améliorer le captcha des commentaires pour plus de sécurité (Spam)

Bonjour !

Par défaut, Pluxml utilise un captcha au format texte.
J'ai eu la désagréable surprise de trouver quelques spams rapidement supprimés en commentaire.
Il est possible d'empêcher la grande majorité des spams en utilisant un captcha image un peu plus évolué.

Nous allons tout d'abord créer un script générant une image contenant un code aléatoire, que nous comparerons ensuite, afin de s'assurer que c'est bien un humain, et non un bot, qui souhaite ajouter un commentaire.

Créez un fichier appelé captcha.php, à la base de votre dossier Pluxml, dans ce même dossier, créez un dossier appelé "fonts", puis placez les 3 polices d'affichages utilisées pour afficher le captcha dans ce dossier :
Police 1 : 1.ttf
Police 2 : 2.ttf
Police 3 : 3.ttf

Voici le contenu à mettre dans captcha.php :

<?php
session_start();
mt_rand(); // On initialise la fonction mt_rand
header("Content-type: image/png"); // Génère un header au format d'image PNG
 
// $letter contient la liste des lettres pouvant être générées
$letter = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
                'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
 
// Puis enfin nous générons le code aléatoire
$code = $letter[mt_rand(0,25)].mt_rand(100,1000000);
$codeLen = strlen($code); // Taille du code
 
// On déplace le code dans une session afin de pouvoir le comparer plus facilement
$_SESSION['code'] = $code;
 
// On prépare l'image
$widthImg = $codeLen * 25;
$heightImg =  40;
$image = imagecreatetruecolor($widthImg, $heightImg);
$bgColor = imagecolorallocate($image, mt_rand(150,255),mt_rand(150,255),mt_rand(150,255));
 
imagefilledrectangle($image, 0, 0, $widthImg, $heightImg, $bgColor);
$fontNbr = array('fonts/1.ttf','fonts/2.ttf');
$fontLetter = array('fonts/3.ttf');
imagettftext($image, mt_rand(15,30), mt_rand(-45,15), 10, 35, imagecolorallocate($image, mt_rand(10,100) ,mt_rand(10,100),mt_rand(10,100)), $fontLetter[0], $code[0]);
 
for ($i = 1; $i < $codeLen; $i++)  {
  $widthX = 20 * $i + 30;
  $heightY = mt_rand(25,40);
  imagettftext($image, mt_rand(27,32), mt_rand(0,45), $widthX,$heightY, imagecolorallocate($image, mt_rand(10,100) ,mt_rand(10,100),mt_rand(10,100)), $fontNbr[mt_rand(0,1)], $code[$i]);
}
 
imagepng($image);     // Enfin, on génère l'image
imagedestroy($image); // Puis on libère les ressources allouées
?>

Vous avez désormais un captcha utilisable (captcha.php), insérable comme une image normale.

Nous allons ensuite remplacer le captcha texte par notre image.
Avec votre client FTP favoris, récupérez le fichier articles.php situé dans /themes/nom_de_votre_theme/articles.php
Modifiez ensuite les lignes suivantes :

<p><?php $plxShow->capchaQ(); ?> : <input name="rep" size="10" type="text"></p>

Par ceci :

<p><img src="captcha.php" alt="Captcha"> : <input name="rep" size="10" type="text"></p>

Ré-uploadez ensuite le fichier articles.php en remplaçant l'ancien fichier, et voilà, désormais votre captcha sera utilisé à la place de celui par défaut.

La dernière étape consiste tout simplement à vérifier que le code entré par l'utilisateur (Ou le bot !) est valide. Si il est valide, alors le commentaire est posté, sinon, il ne l'est pas.
Récupérez le fichier class.plx.motor.php situé dans /core/lib/.
Modifiez ensuite les lignes suivantes (Ligne 755 dans la version actuelle) :

if($this->aConf['capcha'] == 0 OR $content['rep2'] == sha1($content['rep'])) {

Par ceci :

if($_POST['rep'] == $_SESSION['code']) {

Comme d'habitude, réuploadez ce fichier en écrasant l'ancien.

Et puis voilà ! A mort le spam !

(J'ai copié-collé cet article de mon blog, l'article est ici, ça présente mieux !)

Dernière modification par Mordred (15/12/2011 23:27:58)

Hors ligne

#2 16/12/2011 10:19:09

Stéphane
Consultant PluXml
Lieu : pas loin de Toulouse
Inscription : 07/08/2007
Messages : 6 298
Site Web

Re : Améliorer le captcha des commentaires pour plus de sécurité (Spam)

Bonjour Mordred

Merci pour ces explications

D'un certaine façon tu viens de décrire le fonctionnement du plugin plxCapchaImage disponible ici http://www.pluxml.org/?static7/download
Un petit bémol avec ce plugin qui semble poser quelque problème chez certaines personnes.
Mais sinon le principe est identique à ta solution.


Ancien responsable de PluXml  cool

Hors ligne

#3 16/12/2011 11:03:09

Mordred
Membre
Inscription : 03/11/2011
Messages : 10

Re : Améliorer le captcha des commentaires pour plus de sécurité (Spam)

Bonjour Stéphane,

Ah je ne connaissais pas du tout ce plugin, au moins ça fera toujours une petite alternative !

J'utilise très souvent ce captcha sur mes pages, à ma connaissance je n'ai jamais constaté de problème, si jamais j'en vois un je préviendrais ici.

Have fun, et longue vie à Plx.

Hors ligne

#4 16/12/2011 11:24:59

Stéphane
Consultant PluXml
Lieu : pas loin de Toulouse
Inscription : 07/08/2007
Messages : 6 298
Site Web

Re : Améliorer le captcha des commentaires pour plus de sécurité (Spam)

Merci à toi


Ancien responsable de PluXml  cool

Hors ligne

#5 16/12/2011 21:39:17

Hamtaro
Membre
Lieu : Niort
Inscription : 12/06/2007
Messages : 830
Site Web

Re : Améliorer le captcha des commentaires pour plus de sécurité (Spam)

Sinon, le plugin askimet de Stéphane marche au poil ^^

Hors ligne

#6 16/12/2011 22:54:45

Ludo_17
Membre
Inscription : 04/09/2009
Messages : 95
Site Web

Re : Améliorer le captcha des commentaires pour plus de sécurité (Spam)

Bonjour,

une autre solution anti-spam adoptée personnellement sur un autre cms, sans aucun capcha.

Un input texte est ajouté au formulaire et masqué via css (display:none).

On part d'une constatation simple : Les robots remplissent tous les champs d'un formulaire wink

Lors du traitement, ce champ doit tout simplement être vide pour que la validation ait lieu, ce qui sera le cas si le formulaire a été rempli par un vrai visiteur.

C'est transparent pour le visiteur (qui peut même être non-voyant, pas d'image à recopier) et c'est efficace.

Quant on peut faire simple wink

cordialement,
Ludo


Mon petit blog propulsé par pluxml

Hors ligne

#7 16/12/2011 23:59:41

Mordred
Membre
Inscription : 03/11/2011
Messages : 10

Re : Améliorer le captcha des commentaires pour plus de sécurité (Spam)

Uhm pour ma part je trouve la solution dans le message précédent un peu trop simpliste. Certe à l'heure actuelle elle fonctionne, mais tôt ou tard certains spams passeront assurément hmm

Les bots ne remplissent pas forcément tous les champs, certains bots ont même des listes de noms générique de champs (par exemple, beaucoup de gens appellent leur champ contenant le pseudo "pseudo", ou "id") pour justement trouver les champs à remplir.

Donc oui, c'est une solution, mais si jamais ces pages sont très visitées et très rankées, cela attirera les bots, et bon nombre d'entre-eux arriveront à contourner cela très facilement hmm

Pour ma part je suis convaincu qu'un captcha image reste la meilleure solution (Et encore, désormais certains petits malins arrivent à programmer des algo capable de reconnaître les lettres ou chiffres, mais heureusement ce n'est qu'assez peu répandu à l'heure actuelle)

Et oui, les bots de spam évoluent malheureusement bien vite...

Dernière modification par Mordred (17/12/2011 00:08:42)

Hors ligne

#8 17/12/2011 00:39:20

Ludo_17
Membre
Inscription : 04/09/2009
Messages : 95
Site Web

Re : Améliorer le captcha des commentaires pour plus de sécurité (Spam)

Bonsoir Mordred,

c'est en effet simpliste mais il s'agit bien d'une constatation : méthode Testée depuis plus d'un an avec 100% des tentatives indésirables passées à la trappe. Cela m'a d'ailleurs étonné mais c'est logique :

Le seul moyen pour un bot de contourner l'astuce est d'analyser l'affichage réel du champ (la class css, en l'occurrence), sinon comment peut-il deviner qu'il s'agit d'un champ "piège" ? (qui peut être nommé "pseudo" d'ailleurs, ce qui plaira aux bots testant les noms de champs).

J'ai mis en place dès le début un moyen de récolter l'ip ainsi que le contenu des champs du formulaire pour chacune des tentatives "indésirables" (plusieurs chaque jour). A chaque fois, tous les champs sont effectivement remplis.

C'est là que le coté simpliste me plait bien, bien que l'efficacité constatée ne durera certainement pas éternellement smile)

Bien d'accord pour l'efficacité du capcha image. Mais il faut le compléter d'une solution "audible" si l'on consent à penser aux non-voyants.

wink Ludo

Dernière modification par Ludo_17 (17/12/2011 00:39:40)


Mon petit blog propulsé par pluxml

Hors ligne

#9 17/12/2011 13:38:51

Rubén
Membre
Lieu : Tolosa
Inscription : 11/05/2011
Messages : 110

Re : Améliorer le captcha des commentaires pour plus de sécurité (Spam)

Un truc tout simple aussi, mettre un chronomètre et si le formulaire est rempli en moins de 10s on considère que c’est du spam.
Jamais été embêté avec cette solution + champs invisible.


Traduction en occitan de : PluXml (5.4, 5.5, 5.6), plxMySearch, plxMyGoogleAnalytics, plxMyAllArchive, plxMyMailComment, plxMyautoMetaDescription, plxMyBreadcrumb, plxMyComRememberMe, plxMyBetterUrls, plxMyAkismet, plxMyPrivateStatic, plxMyCapchaImage, plxMyMultiLingue, plxMyRescueData, plxMyPager, plxMyContact.
lockArticle + aide, Tweentie, MyTeam, TinyEditor et plxMyShop

Hors ligne

#10 20/01/2012 01:26:53

Jerry Wham
Membre
Inscription : 13/07/2011
Messages : 2 607
Site Web

Re : Améliorer le captcha des commentaires pour plus de sécurité (Spam)

Je viens de modifier le plugin plxCapchaImage car il était buggué. En effet, le mot enregistré en session était renouvellé systématiquement entre l'appel de la fonction Q et celui de la fonction R puisque généré à chaque appel de la méthode construct.
J'ai décalé la génération du mot de passe dans la méthode Q et là tout baigne. J'en ai profité également pour penser aux no ou mal voyants qui ont du mal avec ce type de capcha. Ils ont donc la possibilité de le désactiver pour revenir à la version capcha texte.

La version modifiée est disponible ici.

Qu'en pensez-vous?

Dernière modification par Jerry Wham (01/10/2012 23:16:22)


Mangez un castor, vous sauverez un arbre !

J'ai la tête dans le  ...code

Hors ligne

#11 20/01/2012 09:18:05

bankai
Membre
Lieu : Saint-Pierre-la-cour
Inscription : 06/02/2011
Messages : 611
Site Web

Re : Améliorer le captcha des commentaires pour plus de sécurité (Spam)

je vais testé ta mise à jour, pourquoi ne pas la proposer à Stéphane ?
Edit si je clique sur la case "difficultés à visionner l'image" cela ne fait rien smile

Dernière modification par bankai (20/01/2012 09:21:30)


Mon site web : Mon blog tout simplement avec sa version de pluXml : version dev Github
Un soucis, une angoisse, une question ? le Wiki est là pour tous ici, pour le reste, on est là pour ça :-)
Suivre PluXml sur les réseaux sociaux : Google+ Twitter

Hors ligne

#12 20/01/2012 09:50:01

Stéphane
Consultant PluXml
Lieu : pas loin de Toulouse
Inscription : 07/08/2007
Messages : 6 298
Site Web

Re : Améliorer le captcha des commentaires pour plus de sécurité (Spam)

Jerry Wham a écrit :

Je viens de modifier le plugin plxCapchaImage car il était buggué. En effet, le mot enregistré en session était renouvellé systématiquement entre l'appel de la fonction Q et celui de la fonction R puisque généré à chaque appel de la méthode construct.
J'ai décalé la génération du mot de passe dans la méthode Q et là tout baigne. J'en ai profité également pour penser aux no ou mal voyants qui ont du mal avec ce type de capcha. Ils ont donc la possibilité de le désactiver pour revenir à la version capcha texte.

La version modifiée est disponible ici.

Qu'en pensez-vous?

Super. Je vais testé wink
Merci de ton aide


Ancien responsable de PluXml  cool

Hors ligne

#13 20/01/2012 10:36:32

Jerry Wham
Membre
Inscription : 13/07/2011
Messages : 2 607
Site Web

Re : Améliorer le captcha des commentaires pour plus de sécurité (Spam)

bankai a écrit :

je vais testé ta mise à jour, pourquoi ne pas la proposer à Stéphane ?
Edit si je clique sur la case "difficultés à visionner l'image" cela ne fait rien smile

A priori Stéphane vient de la trouver tongue
Pour le fait que rien ne se passe, c'est normal. Il faut soumettre le formulaire une première fois pour que l'image soit remplacée par le texte car il faut générer un nouvel index dans le tableau $_SESSION.


Mangez un castor, vous sauverez un arbre !

J'ai la tête dans le  ...code

Hors ligne

#14 20/01/2012 11:22:57

Stéphane
Consultant PluXml
Lieu : pas loin de Toulouse
Inscription : 07/08/2007
Messages : 6 298
Site Web

Re : Améliorer le captcha des commentaires pour plus de sécurité (Spam)

C'est vrai que j'ai fait une correction il y a quelque temps avec le capchaimage dispo sur le blog de pluxml.org.
Il me faudrait des retours pour savoir si ça bloque encore ou si c'est définitivement résolu.
Je vais comparé ta solution Jerry avec ce que j'ai fait


Ancien responsable de PluXml  cool

Hors ligne

#15 20/01/2012 11:26:34

bankai
Membre
Lieu : Saint-Pierre-la-cour
Inscription : 06/02/2011
Messages : 611
Site Web

Re : Améliorer le captcha des commentaires pour plus de sécurité (Spam)

ca bloque, mon commentaire est en cours de modération, j'ai du mettre 5 captcha avant que cela soit pris en compte, ils étaient bons pourtant.


Mon site web : Mon blog tout simplement avec sa version de pluXml : version dev Github
Un soucis, une angoisse, une question ? le Wiki est là pour tous ici, pour le reste, on est là pour ça :-)
Suivre PluXml sur les réseaux sociaux : Google+ Twitter

Hors ligne

#16 20/01/2012 11:33:02

Jerry Wham
Membre
Inscription : 13/07/2011
Messages : 2 607
Site Web

Re : Améliorer le captcha des commentaires pour plus de sécurité (Spam)

Jerry Wham a écrit :
bankai a écrit :

je vais testé ta mise à jour, pourquoi ne pas la proposer à Stéphane ?
Edit si je clique sur la case "difficultés à visionner l'image" cela ne fait rien smile

A priori Stéphane vient de la trouver tongue
Pour le fait que rien ne se passe, c'est normal. Il faut soumettre le formulaire une première fois pour que l'image soit remplacée par le texte car il faut générer un nouvel index dans le tableau $_SESSION.


[edit]Pour que le formulaire soit soumis en javascript, il faut modifier la méthode plxShowCapchaQ, et remplacer le champ input name="malvoyant" par :

<input name="malvoyant" type="checkbox" onclick="this.form.submit();"/>

Par contre, cela implique que le bouton submit du formulaire n'ait pas un attribut name dont la valeur est submit, sinon le javascript plantera.

Dernière modification par Jerry Wham (20/01/2012 13:42:21)


Mangez un castor, vous sauverez un arbre !

J'ai la tête dans le  ...code

Hors ligne

#17 20/01/2012 11:41:57

Jerry Wham
Membre
Inscription : 13/07/2011
Messages : 2 607
Site Web

Re : Améliorer le captcha des commentaires pour plus de sécurité (Spam)

bankai a écrit :

ca bloque, mon commentaire est en cours de modération, j'ai du mettre 5 captcha avant que cela soit pris en compte, ils étaient bons pourtant.

Est-ce que tu vérifies la concordance entre la question et la réponse ?

Lorsque le formulaire est soumis, il faut le vérifier en php. Par exemple, en faisant :

$error = false;
if($_POST['malvoyant'] == 'on')
   $error = 'Veuillez répondre à la question anti-spam';
if($_POST['rep2'] != sha1($_POST['rep']) && $_POST['malvoyant'] != 'on')
   $error = 'Réponse anti-spam incorrecte';
if(!error)
   echo 'Cool';
else
   echo $error;

Dernière modification par Jerry Wham (20/01/2012 17:23:46)


Mangez un castor, vous sauverez un arbre !

J'ai la tête dans le  ...code

Hors ligne

#18 20/01/2012 12:06:11

bankai
Membre
Lieu : Saint-Pierre-la-cour
Inscription : 06/02/2011
Messages : 611
Site Web

Re : Améliorer le captcha des commentaires pour plus de sécurité (Spam)

Sur le blog de Pluxml pas le miens ^^, sur le miens le captcha fonctionne bien smile


Mon site web : Mon blog tout simplement avec sa version de pluXml : version dev Github
Un soucis, une angoisse, une question ? le Wiki est là pour tous ici, pour le reste, on est là pour ça :-)
Suivre PluXml sur les réseaux sociaux : Google+ Twitter

Hors ligne

#19 20/01/2012 13:41:20

Jerry Wham
Membre
Inscription : 13/07/2011
Messages : 2 607
Site Web

Re : Améliorer le captcha des commentaires pour plus de sécurité (Spam)

Quand tu dis "sur le blog de Pluxml", ça veut dire quoi ? Parce que, par défaut, pluxml n'a pas de formulaire en partie publique. Il faut ajouter un plugin ou créer une page statique ou modifier une page du thème pour en avoir un. Et dans ces conditions, il faut vérifier la concordance entre question et réponse du capcha.


Mangez un castor, vous sauverez un arbre !

J'ai la tête dans le  ...code

Hors ligne

#20 20/01/2012 13:46:02

bankai
Membre
Lieu : Saint-Pierre-la-cour
Inscription : 06/02/2011
Messages : 611
Site Web

Re : Améliorer le captcha des commentaires pour plus de sécurité (Spam)

Donc oui ^^
Le plugin disponible dans la partie téléchargements du blog: oui il fonctionne bien celui la, je croyais que Stéphane parlait du captcha dans les articles du blog de PluXml smile

Sinon ta correction fonctionne bien sauf que pour la version personne malvoyant en cliquant rien ne se passe même après avoir déjà posté.


Mon site web : Mon blog tout simplement avec sa version de pluXml : version dev Github
Un soucis, une angoisse, une question ? le Wiki est là pour tous ici, pour le reste, on est là pour ça :-)
Suivre PluXml sur les réseaux sociaux : Google+ Twitter

Hors ligne

#21 20/01/2012 15:15:17

Jerry Wham
Membre
Inscription : 13/07/2011
Messages : 2 607
Site Web

Re : Améliorer le captcha des commentaires pour plus de sécurité (Spam)

Comment ça rien ne se passe ? Si tu soumets le formulaire et que tu as ajouté la vérification de la concordance entre question et réponse telle que je l'ai décrite dans un de mes posts plus haut, il devrait se passer quelque chose.

Et si tu fais la modification en javascript, le formulaire devrait être posté dès que la case est cochée.

Je vais mettre cette modif javascript par défaut dans le zip.


Mangez un castor, vous sauverez un arbre !

J'ai la tête dans le  ...code

Hors ligne

#22 20/01/2012 15:19:50

bankai
Membre
Lieu : Saint-Pierre-la-cour
Inscription : 06/02/2011
Messages : 611
Site Web

Re : Améliorer le captcha des commentaires pour plus de sécurité (Spam)

en faite je ne dois pas avoir compris, normalement si tu coche la case malvoyant l'image derrière les lettre devrait disparaître non ?


Mon site web : Mon blog tout simplement avec sa version de pluXml : version dev Github
Un soucis, une angoisse, une question ? le Wiki est là pour tous ici, pour le reste, on est là pour ça :-)
Suivre PluXml sur les réseaux sociaux : Google+ Twitter

Hors ligne

#23 20/01/2012 15:41:59

Jerry Wham
Membre
Inscription : 13/07/2011
Messages : 2 607
Site Web

Re : Améliorer le captcha des commentaires pour plus de sécurité (Spam)

oui c'est ça. Mais en effet, le javascript ne fonctionne pas chez mon hébergeur alors que ça fonctionne en local.

Je vais essayer de corriger ça.


Mangez un castor, vous sauverez un arbre !

J'ai la tête dans le  ...code

Hors ligne

#24 20/01/2012 15:55:51

bankai
Membre
Lieu : Saint-Pierre-la-cour
Inscription : 06/02/2011
Messages : 611
Site Web

Re : Améliorer le captcha des commentaires pour plus de sécurité (Spam)

oki, je test des que la mis en ligne wink


Mon site web : Mon blog tout simplement avec sa version de pluXml : version dev Github
Un soucis, une angoisse, une question ? le Wiki est là pour tous ici, pour le reste, on est là pour ça :-)
Suivre PluXml sur les réseaux sociaux : Google+ Twitter

Hors ligne

#25 20/01/2012 17:40:38

Jerry Wham
Membre
Inscription : 13/07/2011
Messages : 2 607
Site Web

Re : Améliorer le captcha des commentaires pour plus de sécurité (Spam)

Je viens de mettre le plugin à jour ainsi que le plugin plxMyContact afin que les erreurs s'affichent correctement.

Est-ce que c'est mieux ?

Dernière modification par Jerry Wham (01/10/2012 23:18:45)


Mangez un castor, vous sauverez un arbre !

J'ai la tête dans le  ...code

Hors ligne

Pied de page des forums

A propos Nous soutenir Contact Twitter Google+
Copyright © 2006-2019 PluXml.org, tous droits réservés