Problème variable SESSION captcha

Fermé
victoires Messages postés 118 Date d'inscription jeudi 12 mai 2011 Statut Membre Dernière intervention 3 juin 2016 - 16 nov. 2012 à 10:23
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 - 16 nov. 2012 à 14:40
Bonjour,

J'ai un captcha dans un formulaire et quand j'essaye de récupérer la variable SESSION qui contient le code captcha, ça me donne toujours la valeur du code captche précédente. voilà mon code

script qui génère le captcha :
<?php
// On crée la session avant tout
session_start();
 
// On définit la configuration :
$nbr_chiffres = 6; // Nombre de chiffres qui formeront le nombre
 
// Là, on définit le header de la page pour la transformer en image
header ("Content-type: image/png");
// Là, on crée notre image
$_img = imagecreatefrompng('fond_verif_img.png');
 
// On définit maintenant les couleurs
// Couleur de fond :
$arriere_plan = imagecolorallocate($_img, 0, 0, 0); // Au cas où on n'utiliserait pas d'image de fond, on utilise cette couleur-là.
// Autres couleurs :
$avant_plan = imagecolorallocate($_img, 255, 255, 255); // Couleur des chiffres
 
##### Ici on crée la variable qui contiendra le nombre aléatoire #####
$i = 0;
while($i < $nbr_chiffres) {
        $chiffre = mt_rand(0, 9); // On génère le nombre aléatoire
        $chiffres[$i] = $chiffre;
        $i++;
}
$nombre = null;
// On explore le tableau $chiffres afin d'y afficher toutes les entrées qui s'y trouvent
foreach ($chiffres as $caractere) {
        $nombre .= $caractere;
}
##### On a fini de créer le nombre aléatoire, on le rentre maintenant dans une variable de session #####
$_SESSION['aleat_nbr'] = $nombre;
// On détruit les variables inutiles :
unset($chiffre);
unset($i);
unset($caractere);
unset($chiffres);
 
imagestring($_img, 5, 18, 8, $nombre, $avant_plan);
imagepng($_img);
 
?>


script formulaire :
<input name="secure" type="text" size="10">
<img src="verif_code_gen.php" alt="Code de vérification" />


quand je fais

print_r($_SESSION);


ça me retourne toujours valeur précédente du captcha

Merci pour votre aide

Bonne journée

1 réponse

Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
Modifié par Atropa le 16/11/2012 à 11:16
bonjour,

c'est normale vu que tu génère ton nombre après l'affichage du formulaire c'est a la réceptiondu formulaire qu'il faut que tu vérifie le captcha pas quand il est généré

sinon je ne comprend pas pourquoi tu fais autant de foucle pour générer ton nombre

$nombre = ''; 
for($i=0;$i < $nbr_chiffres,$i++) $nombre.= mt_rand(0, 9); // On génère le nombre aléatoire 
$_SESSION['aleat_nbr'] = $nombre; 

reviens au même
0
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
16 nov. 2012 à 11:20
par contre si tu ne déforme pas la police ou que tu ne met pas de parasite ce sera facile de deviner le captcha automatiquement et il ne servira a rien

c'est certain que c'est moins pratique pour l'utilisateur mais a quoi bon en mettre un si il ne sert a rien. il existe nombre de logiciel et de code pour lire les textes dans les images
du coup le script pour casser le captcha n'est pas compliqué a faire si la police n'est pas déformé et/ou parasité
0
victoires Messages postés 118 Date d'inscription jeudi 12 mai 2011 Statut Membre Dernière intervention 3 juin 2016
16 nov. 2012 à 11:22
merci pour votre réponse, je veux essayer de corriger l'erreur ... sinon est ce que vous avez un exemple comment je peux faire pour renforcer la sécurité de captcha ? Merci beaucoup
0
victoires Messages postés 118 Date d'inscription jeudi 12 mai 2011 Statut Membre Dernière intervention 3 juin 2016
16 nov. 2012 à 11:24
en fait moi je vérifie le captcha en javascript donc quand l'utilisateur clique sur envoyer je récupérer la valeur saisie et avec la valeur de $_SESSION voilà
0
Atropa Messages postés 1940 Date d'inscription mercredi 25 juin 2008 Statut Membre Dernière intervention 11 mai 2014 274
16 nov. 2012 à 11:31
logiquement pour la valeur c'est bon vu que l'image est généré avant que le javascript soit envoyé mais ca dépend comment tu le vérifie aussi. fait voir ton code javascript

pour déformer il y a différentes façon de faire.
déjà il faut utiliser une police perso (trouvé sur dafont par exemple)
et la libraire gd permet de le faire
https://www.php.net/manual/fr/book.image.php
0
victoires Messages postés 118 Date d'inscription jeudi 12 mai 2011 Statut Membre Dernière intervention 3 juin 2016
16 nov. 2012 à 11:41
je n'ai pas réussi à récupérer la varibale SESSION en javascript don j'ai passer sa valeur en input hidden dans le formulaire
<input type="hidden" name="captcha" value="<?=$_SESSION['captcha']?>" />

puis en js j'ai fais dans une fonction que j'appel onSubmit :
if (document.form.secure.value != document.form_entrep.captcha.value) {
		alert ("Error captcha !");
		return false;
	}else
	{	return true; }


est ce que c'est possible de récupérer une variable de SESSION en js ?

j'ai fais car sinon l'utlisateur doit remplir tout de nouveau si le captch est incorrect donc j'aimerais faire la validation avant d'aller à la page confirmation ?

Merci encore
0