Les Allergies
Alimentaires
Posez votre question Signaler

Recherche script PHP anti-spam ou Captcha

stefart 33Messages postés 28 février 2008Date d'inscription - Dernière réponse le 1 oct. 2011 à 13:36
Bonjour,
Je suis a la recherche script PHP anti-spam ou Captcha simple d'utilisation mais bien sur efficace
Ca fonction serait de supprimer le spam sur le formulaire d'inscription et de contact a un de mes site en php
Après recherche sur le forum il y en a beaucoup de différents et comme je ne suis pas un pro en php je souhaite pas me prendre la tête a ajouter un script qui serait trop complexe ou inefficace.
alors merci de vos suggestion
Lire la suite 

Recherche script PHP anti-spam ou Captcha »

Suggestions
12 réponses
Réponse
+7
moins plus
un captcha tout simple et efficace :
<?php
class capcha{

	var $min;
	var $max;
	var $alphabet;
	var $word;
	var $num;
	var $numletter;

	function capcha(){
		$this->min = 4;
		$this->max = 6;
		$this->alphabet = 'abcdefghijklmnopqrstuvwxyz';
		$this->grain_de_sel = '6tIb90ZAS11';
		$this->word = $this->createWord();
		$this->num = $this->chooseNum();
		$this->numletter = $this->num2letter();
	}
	
	function q(){
		return 'Quelle est la '.$this->numletter.' lettre du mot '.$this->word.' ?';
	}

	function createWord(){

		$len = rand($this->min,$this->max);
		for($i=0;$i<$len;$i++){
			$word[$i] = $this->alphabet[rand(0,strlen($this->alphabet)-1)];
		}
		return implode('',$word);
	}

	function chooseNum(){
		return rand(1,strlen($this->word));
	}

	function num2letter(){
		if($this->num == strlen($this->word)){
			return 'dernière';
		}
		$array = array('1' => 'première','2' => 'deuxième','3' => 'troisième','4' => 'quatrième','5' => 'cinquième','6' => 'sizième','7' => 'septième','8' => 'huitième','9' => 'neuvième','10' => 'dixième');
		if(isset($array[$this->num])){
			return $array[$this->num];
		}else{
			return $this->num.'.ème';
		}	
	}

	function r(){
		return md5($this->grain_de_sel.$this->word[$this->num-1]);
	}
}
?>

@+
b g
Ajouter un commentaire
Réponse
+2
moins plus
Cryptographp est très bien.
Ajouter un commentaire
Réponse
+2
moins plus
Voici le code d'un fichier anti-spam.php qui crée une image captcha:

session_start();

if ((!isset($_SESSION['rand_code'])) || ($_SESSION['rand_code']=='')) {
    $str = "";
    $length = 0;
    for ($i = 0; $i < 4; $i++) {
        // this numbers refer to numbers of the ascii table (small-caps)
        $str .= chr(rand(97, 122));
    }
    $_SESSION['rand_code'] = $str;
}


$imgX = 100;
$imgY = 40;
$image = imagecreatetruecolor(100, 40);

$backgr_col = imagecolorallocate($image, 238,239,239);
$border_col = imagecolorallocate($image, 208,208,208);
$text_col = imagecolorallocate($image, 46,60,31);
$trait_col = imagecolorallocate($image, 46,60,31);

imagefilledrectangle($image, 0, 0, 100, 40, $backgr_col);
imagerectangle($image, 0, 0, 99, 39, $border_col);
imageline($image, 0, 0, 100, 40, $trait_col);
imageellipse($image, 50, 20, 75, 30, $trait_col);

$font = "ARIAL.TTF"; 
$font_size = 15;
$angle = 10;
$box = imagettfbbox($font_size, $angle, $font, $_SESSION['rand_code']);
$x = (int)($imgX - $box[4]) / 2;
$y = (int)($imgY - $box[5]) / 2;
imagettftext($image, $font_size, $angle, $x, $y, $text_col, $font, $_SESSION['rand_code']);

header("Content-type: image/png");
imagepng($image);
imagedestroy ($image);



dans ton code de formulaire tu l'appelles comme une image: <img src="anti-spam.php" />

la valeur du code captcha se trouve dans la variable de session: $_SESSION['rand_code']

le code créé est une suite de 4 lettres, il est modifiable a souhait et fonctionne avec la bibliothèque GD de création d'image.

@+
Ajouter un commentaire
Réponse
+0
moins plus
Salut Stefart,

C'est tout expliqué ici :
http://www.6ma.fr/tuto/image+securite+pour+formulaires+php-357

Je ne sais pas quel est ton niveau en PHP mais j'espère que ca pourra t'aider.

Bonne chance !
web_traveller- 30 avril 2008 à 15:34
Salut Stefart !

Quel est le problème que tu rencontres exactement avec ton script ? Donne-moi des précisions autrement c'est difficile de t'aider.

Web Traveller
stefart- 5 mai 2008 à 08:29
salut

mon problème est que je ne sais pas ou placer le script de Captcha dans la page pour que ça fonctionne !

Avant ! formulaire il m'indique uniquement erreur (normale j'imagine puis que le code n'a pas encore été saisi)
Apres ! avec ou sans le code l'enregistrement passe

Indication : mon formulaire d'inscription et mon script d'enregistrement est sur la même page d'où l'erreur !

merci de ton aide en tous cas
RETRoXg - 25 mai 2010 à 21:52
Bon tutoriel, je viens tous juste de l'adapter a mon formulaire d'inscription et c'est ok, merci beaucoup
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour

Je souhaite créer un module de commentaires sur mon site. Je m'aide de quelques scripts sur le net que j'essaye d'améliorer, ainsi que de revues (genre PHP pour débutants de Johann-Christian Hanke).

Peu à peu, je suis arrivé à quelque chose de fonctionnel, mais avant de mettre la chose en ligne, je souhaiterais y ajouter un CAPTCHA... et je bloque à ce niveau. Certes il en existe de tout faits, mais j'ai plutôt opté pour un CAPTCHA simple personnel sous forme de question aléatoire...

Le problème, c'est que si j'inclus cette question/réponse dans mon formulaire FORM, quelle que soit la réponse, ça passe et le commentaire est enregistré...

----------> Voilà mon formulaire (édulcoré) :

<form method="POST" name="formulaire" action="<? echo("$PHP_SELF"); ?>">
Nom / Pseudo : <input maxlength="25" type="text" name="pseudo" size="37" value=""><br>
eMail (Facultatif) : <input maxlength="25" type="text" name="titrems" size="37" value=""><br>
Votre commentaire : <textarea rows="9" name="commentaire" cols="37"></textarea><br>

<?php
$var1 = array('chapeau','pantalon','tableau');
$var2 = array('rouge','marron','mauve');
$var3 = array('DSK','Sarkozy','Chirac');
$couleurfinale = $var2[rand(0,3)];
$phrase = 'Quelle est la couleur du '.$var1[rand(0,3)].' '.$couleurfinale.' de '.$var3[rand(0,3)].' ?';
$couleurep = "";
?>

<? echo $phrase;?><br>
<input maxlength="25" type="text" name="couleurep" size="37">
<br><br><INPUT TYPE="submit" value="Valider" name="submit" onClick="this.value='Patientez...';">
</form>

----------> Voilà la façon dont je le traite (édulcoré) :

$valide = 0;
if (isset($couleurep)) {
echo $couleurep." + ".$couleurfinale;
if ($couleurep==$couleurfinale) {
$valide = 1;
}
}

if ($valide = 1){
$fp = fopen("commentaires/$idcom.txt","a");
fputs($fp, "$titrems|$commentaire|$pseudo|$temps");
fputs($fp,"£");
fclose($fp);

echo("<script language=\"javascript\">alert('Votre commentaire a été enregistré');</script>");
}
else
{
echo("<script language=\"javascript\">alert('Votre message ne respecte pas la charte...');</script>");
}

----------

Je ne vois pas d'ou cela peut provenir (il faut dire que mes compétences sont limitées). Je fais un teste entre les deux variables : tirage aléatoire de la couleur et couleur rentrée par le visiteur... mais cela ne fonctionne pas car même si les deux variables sont différentes, le commentaire s'enregistre...

Merci pour vos éventuels éclaircissements et désolé pour mon incompétence :)
Ajouter un commentaire
Réponse
-1
moins plus
à force d'utiliser les scripts fournis (et surtout dans les plus connus !) en ligne ... les boots s'adaptent et passent quand même ... rien de tel que d'avoir le sien (même en modifiant un peu qq chose d'existant ....)
:-)
Ajouter un commentaire
Ce document intitulé « Recherche script PHP anti-spam ou Captcha » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?