Captcha (anti-spam)

Soyez le premier à donner votre avis sur cette source.

Vue 9 708 fois - Téléchargée 642 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
-
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
-
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
-
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 -
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
1305
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
21 mai 2015
-
"- 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)