Page 1 sur 1

Disparition visuel de la question captcha ?

Posté : 29 juil. 2014, 08:51
par manonette
Bonsoir à tous,

J'utilise depuis longtemps FluxBB 1.2 et dessus j'avais installé la mod "CaptchaGuest" de FredoMkb. Tous marchait bien depuis plusieurs années jusqu’à quelques temps ou je me suis rendu compte, que parfois même souvent (8 fois sur 10), la question captcha n'apparaissait pas et qu'il fallait actualiser la page, quel que soit le navigateur, parfois plusieurs fois, pour faire apparaitre la question.

Voir exemple sur les 2 captures d'écran (sans et avec la question ?) :

Image

Image

je n'y connais rien en langage et me contente juste de faire les modifications comme les créateurs le préconise. Avez vous une idée de ce que cela peut être surtout que je n'ai fais aucune modification et que tous marchait bien avant ? j'ai juste l'impression qu'il ne manque pas grand chose pour résoudre le problème et que cela est du à une modification chez mon hébergeur ou des navigateurs ? et pas du code en lui même.

Merci de votre aide, je dépose le script de la mod Captcha
<?php

/*
##          Titre mod :  CaptchaGuest
##
##        Version mod :  1.0
##         Pour PunBB :  1.2.x
##               Date :  10/12/2006
##             Auteur :  FredoMkb (<http://fredomkb.free.fr/forum/>)
##
##  Fichiers affectés :  post.php
##
##      Affecte la BD :  non
##
##        Description :	 Cette mod permet d'afficher un petit captcha textuel
##                       de sécurité (<http://fr.wikipedia.org/wiki/Captcha>).
##                       afin d'autoriser aux visiteurs (guest) de participer
##                       aux forums tout en empêchant l'accès des robots de spam.
##                       
##                       Cette mod est une adaptation d'une contribution de 
##                       Vincent Garnier (vin100), sur les forums de PunBbFr 
##                       (<http://www.punbb.fr/forums/viewtopic.php?id=2621>).
##
##    Fonctionnalités :  Cette mod affiche, en bas de la page de rédaction  
##                       d'un nouveau message ou d'une nouvelle discussion,
##                       une operation arithmétique, tirée au hasard parmis 
##                       une vingtaine disponibles, et demande à l'utilisateur
##                       de noter le résultat dans un champ dédié.
##                       Si la réponse est correcte lors de la validation, 
##                       le message sera accepté et publié, dans le cas contraire,  
##                       un avertissement s'affichera avec un lien "Retour", 
##                       invitant l'utilisateur à corriger le résultat proposé.
##                       Au bout de trois tentatives, le message de l'utilisateur
##                       est effacé et une nouvelle question captcha est affichée.
##
##  Personnalisations :  Vous pouvez modifier et personnaliser certaines 
##                       données utilisées, comme la liste des questions posées,
##                       le nombre de tentatives autorisées ainsi que la liste 
##                       des conseils prodigués aux utilisateurs étourdis...
##                       Ces éléments sont identifiables par un commentaire  
##                       contenant la mention "(a adapter selon vos besoins)".
##
##           Sécurité :  Le résultat de la question affichée, choisie au hasard,  
##                       qui permet de tester l'exactitude de la réponse fournie,  
##                       est encodé grâce à l'algorithme de cryptage MD5 
##                       (<http://fr.php.net/manual/fr/function.md5.php>).
##                       De plus, les questions affichées sont converties en codes
##                       Ascii Html, correspondant au jeux de caractères à la norme
##                       ISO 8859-1 (<http://www.w3.org/TR/html4/sgml/entities.html>).
##                       Enfin, le nombre de tentatives de réponse est limitée.
##
##     AVERTISSEMENTS :  Malgré les différents mécanismes de sécurité utilisés, 
##                       cette mod ne peut en aucun cas être considérée comme 
##                       une méthode réellement efficace et infaillible contre 
##                       les attaques de certains robots de spams sofistiqués.
##                       Si vous êtes victime d'attaques malgré cette protection,
##                       le plus sage est de désactiver l'option permettant aux 
##                       visiteurs de participer librement, tout en les invitant 
##                       à s'inscrire pour devenir membres de votre forum.
##                       Enfin, cette protection n'a aucun effet avec l'option 
##                       de "Réponse rapide", veillez à la désactiver dans la zone
##                       d'administration de votre forum.
##
##         DISCLAIMER :  Veuillez noter que ces mods ne sont pas
##                       officiellement supportés par PunBB. L'installation
##                       de ces modifications est à vos risques et périls.
##                       N'oubliez pas de sauvegarder la base de données et
##                       les fichiers affectés avant de procéder à
##                       l'installation de cette modification.
*/


/*
#---------[ INSTALLATION ]------------------------------------------------------
#
#  Si vous utilisez la dernière version française de PunBb, numérotée 1.2.14 Fr-b
#  (<http://www.punbb.fr/>), et que vous n'avez pas déjà modifié le fichier 
#  nommé "post.php", vous pouvez remplacer celui de votre site par celui fourni 
#  dans cette archive, il est en tout point identique à l'original avec, en plus, 
#  l'intégration de cette mod.
#
#  En revanche, si votre fichier "post.php" a déjà subi quelques modifications, 
#  suivez les étapes ci-après pour réaliser l'intégration de cette mod.
#
*/

/*
#---------[ 1. OUVRIR ]---------------------------------------------------------
*/

post.php


/*
#---------[ 2. TROUVER (lignes: 26-27) ]----------------------------------------
*/

define('PUN_ROOT', './');
require PUN_ROOT.'include/common.php';


/*
#---------[ 3. AJOUTER AVANT ]--------------------------------------------------
*/

/*********** CaptchaGuest ***********/
/* Solution de securite pour limiter l'acces des robots spameurs */
/* Base sur une proposition de vin100 sur le forum PunBbFr */
/* voir : <http://www.punbb.fr/forums/viewtopic.php?pid=30840>
/* Realisation : FredoMkb (c) 2006 */
/**************************************/
/* Valeurs globales */
// Tableau "questions/reponses" (a adapter selon vos besoins).
$cptchList = array(
	'1 + 3' => 4,
	'1 - 1' => 0,
	'2 + 6' => 8,
	'2 - 1' => 1,
	'3 + 6' => 9,
	'3 - 2' => 1,
	'4 + 8' => 12,
	'4 - 2' => 2,
	'5 + 3' => 8,
	'5 - 2' => 3,
	'6 + 4' => 10,
	'6 - 3' => 3,
	'7 + 7' => 14,
	'7 - 5' => 2,
	'8 + 8' => 16,
	'8 - 5' => 3,
	'9 + 3' => 12,
	'9 - 4' => 5,
	'10 + 8' => 18,
	'10 - 4' => 6
);
// Tableau des conseils (a adapter selon vos besoins)
$conseilsList = array(
	'Et si vous mettiez vos lunettes l&agrave;... hein ? ;-)',
	'Je crois vous devriez vous faire aider l&agrave;... ;-)',
	'Accrochez-vous... vous allez y arriver... ;-)',
	'Et bein... vous devriez changer de cerveau... ;-)',
	'Et si vous utilisiez une calculette l&agrave;... non ? ;-)',
	'Euh... vous devriez vous r&eacute;poser un peu l&agrave;... ;-)',
	'&Ccedil;a alors... vous devriez retouner &agrave; l\'&eacute;cole... ;-)',
	'Faut pas d&eacute;primer... &ccedil;a arrive &agrave; tout le monde... ;-)',
	'Vous devriez vous procurer quelques neurones... ;-)',
	'Faut pas vous d&eacute;courager... vous y &ecirc;tes presque... ;-)'
);
/* Fonctions de traitement */
// Fonction pour convertir du texte Html en codes Ascii Html.
function asciihtml($textHtml) {
// Fonction pour retourner le texte Html fourni ($textHtml) converti en codes Ascii Html ($asciiHtml).
// Petite adaptation d'un code issu d'une contribution sur Spip'Contrib proposee par Jean Luc Girard et Coyote, merci a eux.
// Voir : <http://www.spip-contrib.net/Crypter-une-adresse-email>
// Utf<->Html, johan dot andersson at strateg dot se, voir : <http://fr.php.net/manual/fr/function.utf8-decode.php#31815>
	$textHtml = html_entity_decode(htmlentities($textHtml, ENT_COMPAT, 'UTF-8'));
	$asciiHtml = '';
	for ($i = 0; $i < strlen($textHtml); $i++) {
		$asciiHtml .= '&#'.ord($textHtml[$i]).';';
	}
	return $asciiHtml;
}
// Fonction pour preparer la question du captcha
function cptchQuestion() {
	global $cptchList; // Utiliser les globales
	// Construction de la question
	$cptchIndex = rand(0, count($cptchList)-1); // Choix aleatoire d'un couple "question/reponse"
	$cptchQstsList = array_keys($cptchList); // Liste des questions
	$cptchQst = $cptchQstsList[$cptchIndex]; // La question choisie
	$cptchQstMd5 = md5($cptchQst); // Encodage md5 de la question choisie
	$cptchQstHtml = asciihtml($cptchQst.' ='); // Encodage ascii html de la question choisie
	// Retour des resultats
	$resultArray = array($cptchQstHtml, $cptchQstMd5);
	return $resultArray;
}
// Fonction pour analyser la reponse au captcha
function cptchReponse() {
	global $cptchList, $conseilsList, $lang_common; // Utiliser les globales
	$limite = 3; // Nombre de tentatives autorisees (a adapter selon vos besoins)
	$conseil = $conseilsList[rand(0, count($conseilsList)-1)]; // Choix aleatoire d'un conseil
	// Construction du tableau de controle de la reponse fournie
	$cptchQstsMd5List = array();
	foreach ($cptchList as $cle => $val) {
		$cptchQstsMd5List[md5($cle)] = $val;
	}
	// Recuperation des varialbes passees par $_POST
	$cptchQstUsr = trim($_POST['captcha_q']);
	$cptchRepUsr = trim($_POST['captcha']);
	$messageOk = 0;
	if (empty($cptchQstsMd5List[$cptchQstUsr]) || $cptchQstsMd5List[$cptchQstUsr] != $cptchRepUsr) { $messageOk = 1; }
	// Initialisation d'une session pour compter le nombre de tentatives
	$suiteOk = 0;
	session_start(); // Demarrage de la session
	if (isset($_SESSION['nbr'])) {
		$_SESSION['nbr'] ++;  // Iteration du compteur
		if ($_SESSION['nbr'] >= $limite) { $suiteOk = 1; }
	} else {
		$_SESSION['nbr'] = 1; // Initialisation du compteur
	}
	// Construction des messages d'erreur
	$message = '<p><strong>R&eacute;ponse incorrecte, veuillez recommencer... </strong>';
	$message .= '<small style="color: gray;">(tentative '.$_SESSION['nbr'].'/'.$limite.')</small></p>';
	$message .= '<p>Conseil : <em>'.$conseil.'</em></p>';
	// Avertissement et lien lorsque la limite est depassee
	$averto = '<p><strong style="color: maroon;">Vous avez &eacute;puis&eacute; le nombre de tentatives autoris&eacute;es !</strong></p>';
	$averto .= '<p><a href="javascript:location.href=location">'.$lang_common['Go back'].'</a></p>';
	if ($suiteOk) { $message .= $averto; }
	// Supperssion du compteur de la session lorsque la limite est depassee
	if ($_SESSION['nbr'] >= $limite) { unset($_SESSION['nbr']); }
	// Retour des resultats
	$resultArray = array($messageOk, $message, $suiteOk);
	return $resultArray;
}
/*********** Fin CaptchaGuest ***********/


/*
#---------[ 4. TROUVER (lignes: 72-74) ]----------------------------------------
*/

// Did someone just hit "Submit" or "Preview"?
if (isset($_POST['form_sent']))
{


/*
#---------[ 5. AJOUTER APRES ]--------------------------------------------------
*/

	/*********** Captcha Reponse ***********/
	if ($pun_user['is_guest']) {
		$cptchRepRes = cptchReponse();

		if ($cptchRepRes[0]) { message($cptchRepRes[1], $cptchRepRes[2]); }
	}
	/*********** Fin Captcha Reponse ***********/


/*
#---------[ 6. TROUVER (lignes: 439-441) ]--------------------------------------
*/

}
else if (isset($_POST['preview']))
{


/*
#---------[ 7. AJOUTER APRES ]--------------------------------------------------
*/

	/*********** Captcha Reponse ***********/
	if ($pun_user['is_guest']) {
		$cptchRepRes = cptchReponse();

		if ($cptchRepRes[0]) { message($cptchRepRes[1], $cptchRepRes[2]); }
	}
	/*********** Fin Captcha Reponse ***********/


/*
#---------[ 8. TROUVER (lignes: 519-532) ]--------------------------------------
*/

?>
			</div>
			<div class="inform">
				<fieldset>
					<legend><?php echo $lang_common['Options'] ?></legend>
					<div class="infldset">
						<div class="rbox">
							<?php echo implode('<br /></label>'."\n\t\t\t\t", $checkboxes).'<br /></label>'."\n" ?>
						</div>
					</div>
				</fieldset>
<?php

}


/*
#---------[ 9. AJOUTER APRES ]--------------------------------------------------
*/

/*********** Captcha Question ***********/
if ($pun_user['is_guest']) {
	$cptchQstRes = cptchQuestion();	
?>

				<br />
				<fieldset>

					<legend>S&eacute;curit&eacute;</legend>
					<div class="infldset"">

						<p>Veuillez noter le r&eacute;sultat de l'op&eacute;ration suivante&nbsp;:&nbsp; 
							<strong><?php echo $cptchQstRes[0] ?></strong>
							<input name="captcha" id="captcha" type="text" size="5" maxlength="10" style="text-align: center;" />
							<input name="captcha_q" value="<?php echo $cptchQstRes[1] ?>" type="hidden" />
						</p>
					</div>
				</fieldset>
<?php
}
/*********** Fin Captcha Question ***********/


/*
#---------[ 10. ENREGSITRER / ENVOYER SUR LE SERVEUR ]--------------------------
*/

?>

Re: Disparition visuel de la question captcha ?

Posté : 29 juil. 2014, 14:15
par Ryle
Bonjour,

Le code que tu proposes ne correspond à priori pas à la copie d'écran :(

Dans le code, la phrase de contrôle indique " Veuillez noter le résultat de l'opération suivante ", alors que sur la copie d'écran la phrase est " Veuillez noter en chiffre le résultat de la question suivante ". Il se peut donc qu'il y ait d'autres différences entre le code utilisé et celui présenté... difficile dès lors de pouvoir juger du comportement de ton script...

Re: Disparition visuel de la question captcha ?

Posté : 29 juil. 2014, 21:12
par manonette
Bonjour,

Le code que tu proposes ne correspond à priori pas à la copie d'écran :(

Dans le code, la phrase de contrôle indique " Veuillez noter le résultat de l'opération suivante ", alors que sur la copie d'écran la phrase est " Veuillez noter en chiffre le résultat de la question suivante ". Il se peut donc qu'il y ait d'autres différences entre le code utilisé et celui présenté... difficile dès lors de pouvoir juger du comportement de ton script...
Bonsoir Ryle,

Oui, j'ai juste changer ceci, ce que 'on peut faire en faite :

// Tableau "questions/reponses" (a adapter selon vos besoins).

et la phrase pour la réponse que tu sites car j'ai changé justement les question mais pour le reste rien n'a changé.

Je dépose les parties de mon fichier qui sont modifié avec ce captcha, il y a 4 endroits différents dans le fichier :

merci

Re: Disparition visuel de la question captcha ?

Posté : 29 juil. 2014, 21:13
par manonette
La première partie :

Code : Tout sélectionner

<?php /*********************************************************************** Copyright ************************************************************************/ /*********** CaptchaGuest ***********/ /* Solution de securite pour limiter l'acces des robots spameurs */ /* Base sur une proposition de vin100 sur le forum PunBbFr */ /* voir : <http://www.punbb.fr/forums/viewtopic.php?pid=30840> /* Realisation : FredoMkb (c) 2006 */ /**************************************/ /* Valeurs globales */ // Tableau "questions/reponses" (a adapter selon vos besoins). $cptchList = array( 'Combien de lettres dans le mot cheval ?' => 6, 'Combien de mots dans la phrase : le petit cheval ?' => 3, 'Combien de lettres dans le mot démontage ?' => 9, 'Combien de lettres dans le mot cordage ?' => 7, 'Combien de mots dans la phrase : avoir ses EPI en bon état est important ?' => 8, 'Combien de lettres dans tronçonneuse ?' => 12, 'Combien de mots dans la phrase : les griffes pour le démontage ?' => 5, 'Combien de lettres dans le mot formations : ?' => 10 ); // Tableau des conseils (a adapter selon vos besoins) $conseilsList = array( 'Et si vous mettiez vos lunettes l&agrave;... hein ? ;-)', 'Je crois vous devriez vous faire aider l&agrave;... ;-)', 'Accrochez-vous... vous allez y arriver... ;-)', 'Et bein... vous devriez changer de cerveau... ;-)', 'Et si vous utilisiez une calculette l&agrave;... non ? ;-)', 'Euh... vous devriez vous r&eacute;poser un peu l&agrave;... ;-)', '&Ccedil;a alors... vous devriez retouner &agrave; l\'&eacute;cole... ;-)', 'Faut pas d&eacute;primer... &ccedil;a arrive &agrave; tout le monde... ;-)', 'Vous devriez vous procurer quelques neurones... ;-)', 'Faut pas vous d&eacute;courager... vous y &ecirc;tes presque... ;-)' ); /* Fonctions de traitement */ // Fonction pour convertir du texte Html en codes Ascii Html. function asciihtml($textHtml) { // Fonction pour retourner le texte Html fourni ($textHtml) converti en codes Ascii Html ($asciiHtml). // Petite adaptation d'un code issu d'une contribution sur Spip'Contrib proposee par Jean Luc Girard et Coyote, merci a eux. // Voir : <http://www.spip-contrib.net/Crypter-une-adresse-email> // Utf<->Html, johan dot andersson at strateg dot se, voir : <http://fr.php.net/manual/fr/function.utf8-decode.php#31815> $textHtml = html_entity_decode(htmlentities($textHtml, ENT_COMPAT, 'UTF-8')); $asciiHtml = ''; for ($i = 0; $i < strlen($textHtml); $i++) { $asciiHtml .= '&#'.ord($textHtml[$i]).';'; } return $asciiHtml; } // Fonction pour preparer la question du captcha function cptchQuestion() { global $cptchList; // Utiliser les globales // Construction de la question $cptchIndex = rand(0, count($cptchList)-1); // Choix aleatoire d'un couple "question/reponse" $cptchQstsList = array_keys($cptchList); // Liste des questions $cptchQst = $cptchQstsList[$cptchIndex]; // La question choisie $cptchQstMd5 = md5($cptchQst); // Encodage md5 de la question choisie $cptchQstHtml = asciihtml($cptchQst.' ='); // Encodage ascii html de la question choisie // Retour des resultats $resultArray = array($cptchQstHtml, $cptchQstMd5); return $resultArray; } // Fonction pour analyser la reponse au captcha function cptchReponse() { global $cptchList, $conseilsList, $lang_common; // Utiliser les globales $limite = 4; // Nombre de tentatives autorisees (a adapter selon vos besoins) $conseil = $conseilsList[rand(0, count($conseilsList)-1)]; // Choix aleatoire d'un conseil // Construction du tableau de controle de la reponse fournie $cptchQstsMd5List = array(); foreach ($cptchList as $cle => $val) { $cptchQstsMd5List[md5($cle)] = $val; } // Recuperation des varialbes passees par $_POST $cptchQstUsr = trim($_POST['captcha_q']); $cptchRepUsr = trim($_POST['captcha']); $messageOk = 0; if (empty($cptchQstsMd5List[$cptchQstUsr]) || $cptchQstsMd5List[$cptchQstUsr] != $cptchRepUsr) { $messageOk = 1; } // Initialisation d'une session pour compter le nombre de tentatives $suiteOk = 0; session_start(); // Demarrage de la session if (isset($_SESSION['nbr'])) { $_SESSION['nbr'] ++; // Iteration du compteur if ($_SESSION['nbr'] >= $limite) { $suiteOk = 1; } } else { $_SESSION['nbr'] = 1; // Initialisation du compteur } // Construction des messages d'erreur $message = '<p><strong>R&eacute;ponse incorrecte, veuillez recommencer... </strong>'; $message .= '<small style="color: gray;">(tentative '.$_SESSION['nbr'].'/'.$limite.')</small></p>'; $message .= '<p>Conseil : <em>'.$conseil.'</em></p>'; // Avertissement et lien lorsque la limite est depassee $averto = '<p><strong style="color: maroon;">Vous avez &eacute;puis&eacute; le nombre de tentatives autoris&eacute;es !</strong></p>'; $averto .= '<p><a href="javascript:location.href=location">'.$lang_common['Go back'].'</a></p>'; if ($suiteOk) { $message .= $averto; } // Supperssion du compteur de la session lorsque la limite est depassee if ($_SESSION['nbr'] >= $limite) { unset($_SESSION['nbr']); } // Retour des resultats $resultArray = array($messageOk, $message, $suiteOk); return $resultArray; } /*********** Fin CaptchaGuest ***********/

la deuxième partie :

Code : Tout sélectionner

/*********** Captcha Reponse ***********/ if ($pun_user['is_guest']) { $cptchRepRes = cptchReponse(); if ($cptchRepRes[0]) { message($cptchRepRes[1], $cptchRepRes[2]); } } /*********** Fin Captcha Reponse ***********/
La troisième partie :

Code : Tout sélectionner

/*********** Captcha Reponse ***********/ if ($pun_user['is_guest']) { $cptchRepRes = cptchReponse(); if ($cptchRepRes[0]) { message($cptchRepRes[1], $cptchRepRes[2]); } } /*********** Fin Captcha Reponse ***********/
Et la dernière partie :

Code : Tout sélectionner

/*********** Captcha Question ***********/ if ($pun_user['is_guest']) { $cptchQstRes = cptchQuestion(); ?> <br /> <fieldset> <legend>S&eacute;curit&eacute;</legend> <div class="infldset""> <p>Veuillez noter en chiffre le r&eacute;sultat de la question suivante&nbsp;:&nbsp; <strong><?php echo $cptchQstRes[0] ?></strong> <input name="captcha" id="captcha" type="text" size="5" maxlength="10" style="text-align: center;" /> <input name="captcha_q" value="<?php echo $cptchQstRes[1] ?>" type="hidden" /> </p> </div> </fieldset> <?php } /*********** Fin Captcha Question ***********/
merci de votre aide