ANTI-FLOOD PAR WORDLIST ET QUESTION ALÉATOIRE

psykocrash Messages postés 240 Date d'inscription vendredi 14 juin 2002 Statut Membre Dernière intervention 17 mars 2009 - 18 mars 2007 à 17:58
Alexandrex3 Messages postés 1 Date d'inscription samedi 14 juin 2008 Statut Membre Dernière intervention 15 juin 2008 - 15 juin 2008 à 00:08
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/41884-anti-flood-par-wordlist-et-question-aleatoire

Alexandrex3 Messages postés 1 Date d'inscription samedi 14 juin 2008 Statut Membre Dernière intervention 15 juin 2008
15 juin 2008 à 00:08
Super !!!
cs_grobs Messages postés 25 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 1 janvier 2009
29 mars 2007 à 20:17
Toujours pas de note ? Bououuouuuhhh ^^
cs_grobs Messages postés 25 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 1 janvier 2009
22 mars 2007 à 22:32
J'ai changé tout ça, le code devient :

// On récupère le contenu du fichier
$flood_wordlist = implode('|', array_map('trim', file('http://www.mangakage.com/Includes/Fonctions/flood_wordlist.txt')));

Zip mis à jour :)
cs_grobs Messages postés 25 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 1 janvier 2009
20 mars 2007 à 20:22
Haha, j'ai trouvé. Vu que le fichier flood_wordlist.txt contenait un mot par ligne, l'implode générait non pas mot1|mot2|mot3 etc mais mot1
|mot2
|mot3
:)

All bugs are killed !
cs_grobs Messages postés 25 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 1 janvier 2009
20 mars 2007 à 19:52
Aïe aïe aïe, le problème ne vient pas de là, j'ai testé sans cette vérif... Mais d'où vient le bug ? oO
cs_grobs Messages postés 25 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 1 janvier 2009
20 mars 2007 à 19:34
Rectification, l'ancien système ne fonctionnait plus non plus. Je pense que ça vient des regex de remplacement des lettres en langage c0wb0yz.
cs_grobs Messages postés 25 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 1 janvier 2009
20 mars 2007 à 19:26
Aïe... Depuis, le script ne vois plus les tentatives de flood...
cs_grobs Messages postés 25 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 1 janvier 2009
20 mars 2007 à 18:35
Merci bien. Effectivement c'est bien plus simple. Mon point faible a toujours été l'utilisation des arrays. Il a falloir que je m'y mette =)

Par contre, pour les questions que tu as enlevés, je les laisse dans le zip car si les gens ont un espace membre, il leur suffira de modifier la variable de session et le nom du site. Ce que je peux faire c'est les mettre en commentaire.

Encore merci. D'autres avis ?
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
20 mars 2007 à 14:05
Houwaw wouwaw houwaw... tu te prend sacrément la tête pour le choix de ta question...

$question_1 = 'Combien font '.$nombre_1.' '.$choix_operateur[$rand_choix_operateur].' '.$nombre_3.' ?';
eval('$reponse_question_1 = '.$nombre_1.$choix_operateur[$rand_choix_operateur].$nombre_3.';');
$question_2 = 'Quelle est la '.$nombre_2.'ème lettre de l\'alphabet ?';
$reponse_question_2 = $choix_lettre_alphabet[$nombre_2];
$question_3 = 'Connaissez-vous le site Mangakage ?';
$reponse_question_3 = 'oui';
$question_4 = 'Recopiez ce chiffre en commençant par la fin '.$nombre_1.$nombre_3.' :';
$reponse_question_4 = $nombre_3.$nombre_1;
$question_5 = 'Etes-vous loggé à un compte Mangakage ?';
if(isset($_SESSION['login']))
$reponse_question_5 = 'oui';
else
$reponse_question_5 = 'non';

//On choisit aléatoirement une question
$choix_question = array($question_1, $question_2, $question_3, $question_4, $question_5);
$rand_choix_question = array_rand($choix_question);
if($choix_question[$rand_choix_question] == $question_1)
{$reponse = $reponse_question_1;}
elseif($choix_question[$rand_choix_question] == $question_2)
{$reponse = $reponse_question_2;}
elseif($choix_question[$rand_choix_question] == $question_3)
{$reponse = $reponse_question_3;}
elseif($choix_question[$rand_choix_question] == $question_4)
{$reponse = $reponse_question_4;}
elseif($choix_question[$rand_choix_question] == $question_5)
{$reponse = $reponse_question_5;}

//On initialise la variable de session qui contiendra la réponse lors de la vérification
$_SESSION['reponse_antiflood_livreor'] = $reponse;

return 'Question anti-flood : '.$choix_question[$rand_choix_question];


==========>

$questions = array();
$reponses = array();

$questions[] = 'Combien font '.$nombre_1.' '.$choix_operateur[$rand_choix_operateur].' '.$nombre_3.' ?';
eval('$reponses[] = '.$nombre_1.$choix_operateur[$rand_choix_operateur].$nombre_3.';');
$questions[] = 'Quelle est la '.$nombre_2.'ème lettre de l\'alphabet ?';
$reponses[] = $choix_lettre_alphabet[$nombre_2];
$questions[] = 'Recopiez ce chiffre en commençant par la fin '.$nombre_1.$nombre_3.' :';
$reponses[] = $nombre_3.$nombre_1;

//On choisit aléatoirement une question
$choix_question = array_rand($questions);

//On initialise la variable de session qui contiendra la réponse lors de la vérification
if(!isset($_SESSION))
session_start();

$_SESSION['reponse_antiflood_livreor'] = $reponses[$choix_question];

return 'Question anti-flood : '.$questions[$choix_question];

C'est quand même plus simple et plus propre...

Je n'ai pas regardé le reste du code je ne noterais donc pas... l'idée bien qu'elle ne soit pas nouvelle reste une bonne alternative au captcha visuels... .. .

@ tchaOo°

ps : j'ai viré deux question inutiles pour quelqu'un qui utilisera(it) cette source vu qu'elles ne concerne que ton site (êtes vous logué...)... .. .
cs_grobs Messages postés 25 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 1 janvier 2009
19 mars 2007 à 22:00
C'est exactement la fonction dont j'avais besoin ! Merci beaucoup !!

Je met le zip à jour.

Sinon, des idées d'améliorations ?
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
19 mars 2007 à 21:51
Re,
dsl j' ai mal copié collé :S
c' est plustôt ;

eval('$reponse_question_1 = '.$nombre_1.$choix_operateur[$rand_choix_operateur].$nombre_3.';');

@+
ImmortalPC Messages postés 954 Date d'inscription mardi 11 mai 2004 Statut Membre Dernière intervention 11 novembre 2008 2
19 mars 2007 à 21:39
Salut,
pour ton bug c' est tout con.
cf ligne 45 > Poser_question_antiflood.php :
$reponse_question_1 = $nombre_1.$choix_operateur[$rand_choix_operateur].$nombre_3;
Or php comprend que ce n' est que du texte !

Utilises la fonction eval :
$reponse_question_1 = eval($nombre_1.$choix_operateur[$rand_choix_operateur].$nombre_3);

@+
cs_grobs Messages postés 25 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 1 janvier 2009
19 mars 2007 à 20:25
héhé, bonne nouvelle, j'ai trouvé mon erreur. Aux lignes 61 à 69, j'avais mis $rand_choix_question au lieu de $choix_question[$rand_choix_question]. Suis-je balot !? ^^

J'avais également oublié de gérer le message de succès de l'opération si l'on était pas loggé.

Il ne reste donc plus que le bug de la variable $reponse_question_1.

Je met à jour le zip de suite.
cs_grobs Messages postés 25 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 1 janvier 2009
19 mars 2007 à 20:09
Je viens de trouver une précision au bug :

"Les deux bugs (certainement liés) résident dans le fichier de fonction poser_question_antiflood.php :

- La variable $reponse ne contient rien alors qu'elle devrait contenir la véritable réponse à donner.
- La variable $reponse_question_1 contient (par exemple) 7+3 au lieu du résultat (en l'occurrence, elle devrait retourner 10).

Si quelqu'un voit pourquoi, merci de m'en donner la raison."
cs_grobs Messages postés 25 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 1 janvier 2009
19 mars 2007 à 18:59
C'est mis à jour :)

Un réseau bayésien ? Mais pour quoi faire ? En quoi les probas pourraient jouer dans mon code ?

PS : toujours personne pour mon problème ?
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
19 mars 2007 à 00:00
c'est un captcha, pas un anti spam... c'est un anti flood...


amelioration possible : pour les mots, tente de faire un reseau bayesien
cs_grobs Messages postés 25 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 1 janvier 2009
18 mars 2007 à 18:31
oui.
psykocrash Messages postés 240 Date d'inscription vendredi 14 juin 2002 Statut Membre Dernière intervention 17 mars 2009
18 mars 2007 à 18:19
T'as utilisé session_start() avant la vérification ?
cs_grobs Messages postés 25 Date d'inscription dimanche 12 mars 2006 Statut Membre Dernière intervention 1 janvier 2009
18 mars 2007 à 18:02
Et bien justement la variable anormalement vide $_SESSION['reponse_antispam_livreor'].
psykocrash Messages postés 240 Date d'inscription vendredi 14 juin 2002 Statut Membre Dernière intervention 17 mars 2009
18 mars 2007 à 17:58
Qu'est ce que tu passes comme valeur au paramètre $variable_de_session de la fonction verif_reponse_antispam() ?
Rejoignez-nous