Captcha (anti-spam)

Soyez le premier à donner votre avis sur cette source.

Vue 10 003 fois - Téléchargée 718 fois

Description

Les captcha (technique antispam) sont très régulièrement basés sur des images , ce qui les rends non accessibles pour les non-voyants ou mal-voyant.

Ce captcha est donc sous forme de question/réponse qui sont à configurer dans un fichier permettant ainsi d'avoir des questions aléatoires.
En plus de la simple validation ou non, j'ai ajouté la possibilité de blacklister durant une période donnée les personnes ne répondant pas correctement à une question.

Conclusion :


La configuration du captcha (redirection, blacklistage, durée du blacklistage, ...) se fait dans le fichier de la classe.
Les questions-réponses sont à mettre dans le fichier question_list.php
Ne pas oublier de donner les droits d'écriture sur le fichier FS_blacklist.txt (fichier contenant les adresses IP blacklistées)
Il y a deux versions de la classe: une à la norme php5 et l'autre pour php4, elles sont strictement identique, le seul changement réside dans l'utilisation des private et public ainsi que le nom du constructeur.

Un petit exemple d'utilisation est fournit dans le fichier zip.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
cs_VVV Messages postés 40 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 15 juin 2009
21 juil. 2009 à 10:03
Super !
J'avais pensé modifier la class aussi au niveau de la redirection (si captcha Ok):
header("Location: traitement.php?info1=$TB1&info1=$TB2&info1=$TB3");
Mais je préfère ta solution. Merci :-)
leviathan516 Messages postés 4 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 20 juillet 2009
20 juil. 2009 à 22:50
Bonjour,

voici un exemple tiré du fichier de test de la classe et modifié pour reprendre ton code.

<?php
session_start();

require_once "captcha.class.php";

$captcha = new FS_captcha();
$result = "";

if (isset($_POST["reponse"]) && !empty($_POST["reponse"])) {
if ($captcha->check($_POST["reponse"])) {
// traitement des autres champs du formulaire
print_r($_POST);
} else {
die('erreur dans le captcha');
}
}
$question = $captcha->generate();
?>
<html>
<head>
<title>Test</title>
</head>

<form method="POST" name="code" action="traitement.php">

<?php echo $question; ?> :


</form>

</html>
cs_VVV Messages postés 40 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 15 juin 2009
20 juil. 2009 à 17:04
Salut :-)

J'aurais voulu intégrer ce système dans un formulaire php avec traitement des données dans une autre page.
Le formulaire comporte plusieurs champs à remplir, plus celui du captcha et de sa réponse.

Malheureusement je n'arrive pas à traiter les champs du formulaire après (en même temps? que) le captcha...
Comment pourrais-je envisager et la vérification du captcha et le traitement du formulaire en une seule et même opération ?

A toutes fins utiles, voici une partie du code :

<form method="POST" name="code" action="traitement.php">



">



</form>
juki_webmaster Messages postés 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 3
15 nov. 2006 à 21:43
Moi à la limite je redigirais meme pas, je le ferais croire qu'il repond toujours aux captchas, si tu le bloque il reviendras avec une autre IP.
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
6 nov. 2006 à 14:32
"- je n'ai pas utilisé file() à la place de explode(): file ajoute \n\r à la fin des ligne alors que j'ai l'habitude d'utiliser seulement \n. De plus il y a un risque de problème sous Windows (avec les \n et les \n\r). Etant donné qu'il s'agit de fonction assez similaire, je ferais des tests de rapidité sur les deux fonctions afin de voir les différences et j'en tirerais les conséquences. Si vous avez plus de renseignements sur ça, je suis tout à votre écoute."

Non file n'ajoute rien en fin de ligne... le \n\r est le format de retour à la ligne windows... sous Linux c'est \n et sous Mac c'est \r... au moins avec file() tu est sûr d'être crossplateforme... et si tu as peur tu peux toujours faire un rtrim() sur la line... .. . ;o)

http://fr2.php.net/file

Sinon ça m'a l'air plutot pas mal... par contre tout comme pour le backlistage je laisserais le choix de rediriger ou non sur une page... d'ailleurs à ce sujet plutot que d'utiliser des constantes qui ne servent qu'un ou deux fois il peut être bien de créer un attribut $conf qui stockerait la config sous forme de tableau associatif... les valeurs de configuration pouvant être changées via le constructeur et\ou un méthode... mais c'est un détail... .. . ;o)

@ tchaOo°

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (leviathan516)