Retourner à l'accueil du site  
Design:
Accueil
Actu Freenews
FAQ
Forums
Glossaire
Etat du réseau
Dossiers
Dialogue en direct
Liens ADUF
Newsletter
Livre d'or
Statistiques
A propos de l'ADUF
[Résolu] Erreur 403 - Refus de traitement de la requête
Aller en bas de la page
ADUF Index du Forum » Pages perso & dl.free.fr Aller à la page Précédente  1, 2, 3, 4, 5, 6  Suivante
Répondre au sujet Voir le sujet précédent : Voir le sujet suivant 
MessagePosté le: Mercredi 31 Octobre 2007 10:10:54 Aucun numéro de ligne indiqué dans le profil Répondre en citantReporter le post à l'équipe de modération
masterboot
Régulier
Régulier


Hors-ligne

Inscrit le : 18 Déc 2006
Messages : 870
Sexe :

Forfait : Accès libre





sonia75 a écrit:
les tentatives d'échec des robots spammeurs sont stockées dans une table "dc_captcha".


sonia75 a écrit:
En d'autres termes cela correspond-il à une "écriture dans la base"


ba oui tu répond toi même a ta question. il faux inactiver l'enregistrement du passage des robots (dont tu n'a que faire si leur message n'est pas enregistré)
Voir le profil de l'utilisateur Envoyer un message privé
MessagePosté le: Mercredi 31 Octobre 2007 20:15:52 Aucun numéro de ligne indiqué dans le profil Répondre en citantReporter le post à l'équipe de modération
sonia75
Intéressé
Intéressé

Hors-ligne

Inscrit le : 07 Juil 2006
Messages : 75
Sexe :

Forfait : Accès libre





Merci Masterboot de cette confirmation.
Autrement dit, je suis encore partie pr un blocage !

J'ai trouvé ça ds le mode d'emploi du captcha :

Code:

$GLOBALS['captcha_logs'] (chemin vers le fichier de log) : toutes les erreurs (tentative de spam?) sont journalisées dans le fichier indiqué. Renseignez un chemin vide pour désactiver la journalisation des échecs


J'ai donc écrit cela dans le code de ma page
Code:
$GLOBALS[''] (chemin vers le fichier de log) : toutes les erreurs (tentative de spam?) sont journalisées dans le fichier indiqué. Renseignez un chemin vide pour désactiver la journalisation des échecs


A ton avis cela va t'il bien permettre de ne rien enregistrer dans la base ?

Sinon, je me demande bien comment faire pr vider les enregistrements actuels ds phpmSQL... Je crains de tt foutre en l'air...

Conseils bienvenus !
Voir le profil de l'utilisateur Envoyer un message privé
MessagePosté le: Mercredi 31 Octobre 2007 20:36:45 Aucun numéro de ligne indiqué dans le profil Répondre en citantReporter le post à l'équipe de modération
sonia75
Intéressé
Intéressé

Hors-ligne

Inscrit le : 07 Juil 2006
Messages : 75
Sexe :

Forfait : Accès libre





Bon, je viens de tester cette requête
# <?
# mysql_query("DELETE * FROM dc_captcha");
# ?>

Il me dit que la requête a été exécutée avec succès et pourtant quand je fais "afficher", je vous toujours mes 30 pages d'enregistrements ! Je sais pas du tout à quoi ça correspond...
Rien please...
merci.
Voir le profil de l'utilisateur Envoyer un message privé
MessagePosté le: Mercredi 31 Octobre 2007 21:48:19 Aucun numéro de ligne indiqué dans le profil Répondre en citantReporter le post à l'équipe de modération
masterboot
Régulier
Régulier


Hors-ligne

Inscrit le : 18 Déc 2006
Messages : 870
Sexe :

Forfait : Accès libre





sonia75 a écrit:
$GLOBALS['captcha_logs'] / $GLOBALS['']

$GLOBALS['captcha_logs'] c'est le nom de la variable globale qui contient le chemin du fichier de log.
faire $GLOBALS[''] ne change rien car c'est une autre variable.

tu dois avoir qque part un truc du genre $GLOBALS['captcha_logs'] = '/dossier/truc/machin/fichier.extension'; c'est la qu'il faux intervenir et mettre :
$GLOBALS['captcha_logs'] = ''; pour que les erreurs (tentative de spam) ne soit pas enregistrer dans un fichier


sonia75 a écrit:
A ton avis cela va t'il bien permettre de ne rien enregistrer dans la base ?

non ce système semble être dédié a une journalisation en fichier (log) des tentative sur le captcha
Voir le profil de l'utilisateur Envoyer un message privé
MessagePosté le: Mercredi 31 Octobre 2007 21:56:37 Aucun numéro de ligne indiqué dans le profil Répondre en citantReporter le post à l'équipe de modération
masterboot
Régulier
Régulier


Hors-ligne

Inscrit le : 18 Déc 2006
Messages : 870
Sexe :

Forfait : Accès libre





sonia75 a écrit:
DELETE * FROM dc_captcha


Cette requete vide la table dc_captcha qui semble (je ne connais pas ton CMS) contenir une trace des code essayé (donc une forme de stat)

tu as plusieurs choix pour l'envoyer.

1/ soit par un script perso (ce qui semble être ton choix a la vue du code donné)
2/ soit directement depuis l'interface d'administration PhpMyAdmin de ton compte.

dans les deux cas c'est pas le pied car en fait si tu par en vacances ta table va continuer de se remplir sans toi.

Le mieux serait de trouver ou cette table est enrichie et d'empêcher que la requête d'insert soit passée.
Cette requête doit avoir une tronche du style : INSERT INTO dc_captcha ...
Dans ce cas plus besoins de faire le ménage régulièrement.
Voir le profil de l'utilisateur Envoyer un message privé
MessagePosté le: Jeudi 1 Novembre 2007 09:32:49 Aucun numéro de ligne indiqué dans le profil Répondre en citantReporter le post à l'équipe de modération
sonia75
Intéressé
Intéressé

Hors-ligne

Inscrit le : 07 Juil 2006
Messages : 75
Sexe :

Forfait : Accès libre





masterboot a écrit:

tu dois avoir qque part un truc du genre $GLOBALS['captcha_logs'] = '/dossier/truc/machin/fichier.extension'; c'est la qu'il faux intervenir et mettre :
$GLOBALS['captcha_logs'] = ''; pour que les erreurs (tentative de spam) ne soit pas enregistrer dans un fichier



Oui en fait j'ai ça :
Code:

# - log des tentatives echouees de captcha (spam ?)
#mettez cette ligne en commentaire pour desactiver la journalisation des echecs
$GLOBALS['captcha_logs'] = dirname(__FILE__).'/spam.txt';


Donc j'ai mis
Code:

# - log des tentatives echouees de captcha (spam ?)
   #mettez cette ligne en commentaire pour desactiver la journalisation des echecs
   $GLOBALS['captcha_logs'] = dirname(__FILE__).'/';



masterboot a écrit:

sonia75 a écrit:
A ton avis cela va t'il bien permettre de ne rien enregistrer dans la base ?

non ce système semble être dédié a une journalisation en fichier (log) des tentative sur le captcha


Aie... ça sert à rien alors le truc que j'ai fait plus haut ?

Mille mercis de ton aide...
Voir le profil de l'utilisateur Envoyer un message privé
MessagePosté le: Jeudi 1 Novembre 2007 09:35:20 Aucun numéro de ligne indiqué dans le profil Répondre en citantReporter le post à l'équipe de modération
sonia75
Intéressé
Intéressé

Hors-ligne

Inscrit le : 07 Juil 2006
Messages : 75
Sexe :

Forfait : Accès libre





masterboot a écrit:
Le mieux serait de trouver ou cette table est enrichie et d'empêcher que la requête d'insert soit passée.
Cette requête doit avoir une tronche du style : INSERT INTO dc_captcha ...
Dans ce cas plus besoins de faire le ménage régulièrement.



Yes ! tu as raison, j'ai trouvé ça :

Code:

function save_captcha()
   {
      global $con, $blog;
      if ( empty($GLOBALS['captcha_enable']) || !isset($GLOBALS['dc_captcha_index'][1]) ) return;

      if ( !empty($GLOBALS['dc_captcha_index'][2]) )
      {
       $code = $GLOBALS['dc_captcha_index'][0];
       $q = $GLOBALS['captcha_level'] . '-' . $GLOBALS['dc_captcha_index'][1];
      }
      else
      {
         $q = md5(strtolower($GLOBALS['dc_captcha_index'][1]));
         $code = md5(uniqid(microtime()));
      }
      dcCaptcha::clear();

      $ip = !empty($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : getenv('REMOTE_ADDR');
      $browser = substr($_SERVER['HTTP_USER_AGENT'], 0, 100);

      $insReq = 'INSERT INTO '. DB_PREFIX . 'captcha '.
         '(captcha_code, captcha_solution, captcha_ip_address, captcha_user_agent, captcha_time) VALUES ('.
         '\''.$code.'\', '.
         '\''.$q.'\', '.
         '\'' . $con->escapeStr($ip) . '\', '.
         '\'' . $con->escapeStr($browser) . '\', '.
         time().
      ')';

      if (!$con->execute($insReq))
         $blog->setError('MySQL : '.$con->error(), 2000);
      $GLOBALS['captcha_code'] = $code;
  }



Alors à ton avis je le modifie comment ?

Merci !


Dernière édition par sonia75 le Jeudi 1 Novembre 2007 09:36:07; édité 1 fois
Voir le profil de l'utilisateur Envoyer un message privé
MessagePosté le: Jeudi 1 Novembre 2007 09:38:11 Aucun numéro de ligne indiqué dans le profil Répondre en citantReporter le post à l'équipe de modération
sonia75
Intéressé
Intéressé

Hors-ligne

Inscrit le : 07 Juil 2006
Messages : 75
Sexe :

Forfait : Accès libre





masterboot a écrit:
2/ soit directement depuis l'interface d'administration PhpMyAdmin de ton compte.



Oui c'est ce que j'aimerais faire mais je ne sais pas où le faire (en appuyant sur les petites croix rouges une par une en face de chaque enregistrement ?)

Merci de ton aide encore une fois, sans toi je suis perdue !


Dernière édition par sonia75 le Jeudi 1 Novembre 2007 09:38:33; édité 1 fois
Voir le profil de l'utilisateur Envoyer un message privé
MessagePosté le: Jeudi 1 Novembre 2007 15:08:10 Pas de caractéristiques de ligne pour un abonnement avec construction de ligne Répondre en citantReporter le post à l'équipe de modération
freemat
Webmaster
Webmaster


Hors-ligne

Inscrit le : 06 Mar 2004
Messages : 23595
Sexe :
Ville : Montargis

Forfait : Freebox Dégroupage Total avec construction de ligne
Freebox : v4r





sonia75 a écrit:
$GLOBALS['captcha_logs'] = dirname(__FILE__).'/';[/code]

Non faut mettre
Code:
// $GLOBALS['captcha_logs'] = ....

Par contre, ça se trouve dans quel fichier ? Que j'ajoute l'info à https://www.aduf.org/viewtopic.php?p=957846#957846
_________________
Mat
[1] Posez votre question sur le forum en priorité, et non par messages privés Wink
[2] Evitez de poster votre propre problème dans le topic d'un autre membre
[3] Si votre problème est résolu, modifiez le statut de votre topic en bas de la page
Voir le profil de l'utilisateur Envoyer un message privé
MessagePosté le: Jeudi 1 Novembre 2007 15:35:11 Aucun numéro de ligne indiqué dans le profil Répondre en citantReporter le post à l'équipe de modération
sonia75
Intéressé
Intéressé

Hors-ligne

Inscrit le : 07 Juil 2006
Messages : 75
Sexe :

Forfait : Accès libre





Ok, merci beaucoup Freemat, je viens de faire la manip' mais d'après Masterboot cela n'empêche pas l'enregistrement des erreurs des robots ds la bdd (dc_captcha)... peux tu me le confirmer ?

PS : ça se trouve dans le fichier config.php


Dernière édition par sonia75 le Jeudi 1 Novembre 2007 15:35:49; édité 1 fois
Voir le profil de l'utilisateur Envoyer un message privé
MessagePosté le: Jeudi 1 Novembre 2007 15:40:06 Pas de caractéristiques de ligne pour un abonnement avec construction de ligne Répondre en citantReporter le post à l'équipe de modération
freemat
Webmaster
Webmaster


Hors-ligne

Inscrit le : 06 Mar 2004
Messages : 23595
Sexe :
Ville : Montargis

Forfait : Freebox Dégroupage Total avec construction de ligne
Freebox : v4r





A mon avis, si on n'insère plus les requêtes dans dc_captcha, plus aucun commentaire ne va être possible Wink

Par contre, si c'est bien fait, j'imagine qu'il y a quelque chose qui vide régulièrement de cette table les entrées trop ancienne (selon le champ dc_captcha).

Mais j'aimerai bien voir où est utilisé $GLOBALS['captcha_logs'] et où est appelé save_captcha
_________________
Mat
[1] Posez votre question sur le forum en priorité, et non par messages privés Wink
[2] Evitez de poster votre propre problème dans le topic d'un autre membre
[3] Si votre problème est résolu, modifiez le statut de votre topic en bas de la page
Voir le profil de l'utilisateur Envoyer un message privé
MessagePosté le: Jeudi 1 Novembre 2007 18:25:41 Aucun numéro de ligne indiqué dans le profil Répondre en citantReporter le post à l'équipe de modération
sonia75
Intéressé
Intéressé

Hors-ligne

Inscrit le : 07 Juil 2006
Messages : 75
Sexe :

Forfait : Accès libre





au secours, j'ai l'impression qu'il n'y a aucune solution, qu'on utilise un antispam ou un captcha ça revient au même...

Bon je te copie-colle le code de la page config.php

Code:
#---- configuration ---------------------------------

   # - accessibilite :0 => texte accessible
   # - accessibilite :1 => multiples images PNG
   # - accessibilite :2 => image GD unique
   $GLOBALS['captcha_level'] = rand(0, 0);


   # - tableau SUPPLEMENTAIRE de mots utilisables (mots a completer, enieme lettre, etc.)
   $GLOBALS['captcha_my_words'] = array(
      'captcha', 'addition', 'soustraction', 'multiplication', 'protection', 'solution', 'serveur', 'client', 'authentification',
      'dynamique', 'concept', 'réaction', 'commentaire', 'originalité', 'succès', 'innovation', 'originialité',
      );


   # - tableau de questions personnelles (supplémentaires)
   $GLOBALS['my_captcha'] = array(
      __('Quelle est la couleur du cheval blanc d/Henri IV ?') => __('blanc'),
      sprintf(__('Que donne la somme %s + %s ? (chiffres)'), $a = rand(1, 20), $b = rand(1, 20) ) => $a + $b,
      sprintf(__('Que vaut la somme de %s et %s ? (chiffres)'), $a = rand(1, 20), $b = rand(1, 20) ) => $a + $b,
      __('Quelle est la capitale de la France ?') => __('Paris'),
      __('Quel est le nom de famille de Nicolas Rey ?') => __('Rey'),
      __('Quel est le nom de famille de Charles Bukowski ?') => __('Bukowski'),
      __('Quel est le nom de famille de Michel Houellebecq ?') => 'Houellebecq',
      );


   # - types de question/captcha possibles (mettez en commentaire les types a desactiver)
   #si vous ne souhaitez que des operations mathematiques, mettez toutes les autres lignes en commentaires
   $GLOBALS['captcha_fonctions'][] = 'my_captcha'; //utilisation des questions personnelles contenues dans $GLOBALS['my_captcha']


   # - log des tentatives echouees de captcha (spam ?)
   #mettez cette ligne en commentaire pour desactiver la journalisation des echecs
   //$GLOBALS['captcha_logs'] = dirname(__FILE__).'/';

?>


Voici le code de la pages functions.php

Code:


class dcCaptcha
{
   function MAX() {return 50;}

   function encode($str)
   {
      return (dc_encoding == 'UTF-8') ? utf8_encode($str) : htmlentities($str);
   }



   function nombres($i)
   {
      $arr = array(
         0 =>'zéro',
         1 =>'un',
         2 =>'deux',
         3 =>'trois',
         4 =>'quatre',
         5 =>'cinq',
         6 =>'six',
         7 =>'sept',
         8 =>'huit',
         9 =>'neuf',
         10 =>'dix',
         11 =>'onze',
         12 =>'douze',
         13 =>'treize',
         14 =>'quatorze',
         15 =>'quinze',
         16 =>'seize',
         17 =>'dix-sept',
         18 =>'dix-huit',
         19 =>'dix-neuf',
         20 =>'vingt',
         21 =>'vingt et un',
         22 =>'vingt-deux',
         23 =>'vingt-trois',
         24 =>'vingt-quatre',
         25 =>'vingt-cinq',
         26 =>'vingt-six',
         27 =>'vingt-sept',
         28 =>'vingt-huit',
         29 =>'vingt-neuf',
         30 =>'trente',
         31 =>'trente et un',
         32 =>'trente-deux',
         33 =>'trente-trois',
         34 =>'trente-quatre',
         35 =>'trente-cinq',
         36 =>'trente-six',
         37 =>'trente-sept',
         38 =>'trente-huit',
         39 =>'trente-neuf',
         40 =>'quarante',
         41 =>'quarante et un',
         42 =>'quarante-deux',
         43 =>'quarante-trois',
         44 =>'quarante-quatre',
         45 =>'quarante-cinq',
         46 =>'quarante-six',
         47 =>'quarante-sept',
         48 =>'quarante-huit',
         49 =>'quarante-neuf',
         50 =>'cinquante',
      );
      return $i >= 0 ? $arr[$i] : array_values($arr);
   }



   function position_lettre($size, $n=0)
   {
      $res = '';
      switch($n)
      {
         case 0  : $res = 'le première'; break;
         case 1  : $res = 'le deuxième'; break;
         case 2  : $res = 'le troisième'; break;
         case 3  : $res = 'le quatrième'; break;
         case 4  : $res = 'le cinquième'; break;
         case 5  : $res = 'le sixième'; break;
         case 6  : $res = 'le septième'; break;
         case 7  : $res = 'le huitième'; break;
         case 8  : $res = 'le neuvième'; break;
         case 9 : $res = 'le dixième'; break;
         case 10 : $res = 'le onzième'; break;
         case 11 : $res = 'le douzième'; break;
         case 12 : $res = 'le treizième'; break;
         case 13 : $res = 'le quatorzième'; break;
         case 14 : $res = 'le quinzième'; break;
         case 15 : $res = 'le seizième'; break;
         case 16 : $res = 'le dix-septième'; break;
         case 17 : $res = 'le dix-huitième'; break;
         case 18 : $res = 'le dix-neuvième'; break;
         case 19 : $res = 'le vingtième'; break;
      }

      if (1+$n == $size) $res= 'le dernière';
      else if ( 1+$n == $size-1 ) $res='l\'avant-dernière';

      return $res;
   }



   function mots()
   {
      $mots = dcCaptcha::nombres(-1); //recupere tous les nombres
      array_map('mots2l10n', $mots); //internalisation

      if ( !empty($GLOBALS['captcha_my_words']) )
      {
         $mots = array_merge($mots, $GLOBALS['captcha_my_words']); //ajoute les mots personnels
      }

      $i= rand(0, count($mots)-1); //mot aleatoire
      return $mots[$i];
   }



   function addition()
   {
      while ( ( $c =($a = rand(0, dcCaptcha::MAX())) + ($b = rand(0, dcCaptcha::MAX()))) > dcCaptcha::MAX() );
      return array( sprintf(__('combien font %s et %s ? (chiffres)'), __(dcCaptcha::nombres($a)), __(dcCaptcha::nombres($b)) ) , $c);
   }



   function soustraction()
   {
      while ( ( $c =($a = rand(0, dcCaptcha::MAX())) - ($b = rand(0, dcCaptcha::MAX()))) < 0 );
      return array( sprintf(__('que donne %s moins %s ? (chiffres)'), __(dcCaptcha::nombres($a)), __(dcCaptcha::nombres($b)) ) , $c);
   }



   function multiplication()
   {
      while ( ( $c =($a = rand(0, dcCaptcha::MAX())) * ($b = rand(0, dcCaptcha::MAX()))) > dcCaptcha::MAX() );
      return array( sprintf(__('que donne %s fois %s ? (chiffres)'), __(dcCaptcha::nombres($a)), __(dcCaptcha::nombres($b)) ) , $c);
   }



   function lettre_mot()
   {
      $f = rand(0, 3);

      if ($f <= 1) // 0
      {
         if ($f)  // 1 : on recupere un mot
         {
            do{
               do{
                  $str = dcCaptcha::mots();
                  $ok = strpos($str, ' ') === FALSE;
               } while (!$ok);
               $l = strlen($str);
               $nbr = rand(0, $l);
            }while ((!$ok = dcCaptcha::position_lettre($l, $nbr)) || !isset($str[$nbr]) );
         }
         else // 0 : on genere un chaine de caracteres
         {
            $str = '';
            $l = rand(4, 16); //4 a 16 caracteres
            $chars = range(0, 9); // chiffres de 0 a 9 : 0123456789
            $chars = array_merge($chars, range('A', 'Z')); //=> 0123456789ABCDEF...XYZ
            $chars = array_merge($chars, array('-', '_', '*')); //=> 0123456789ABCDEF...XYZ-_*
            shuffle($chars); // on touille

            for ($i=0;  $i < $l; $i++)
            {
               $c= array_pop($chars);
               $str.= rand(0, 1) ? strtolower($c) : strtoupper($c); // minuscule/MAJUSCULE
            }

            $nbr = rand(0, $l-1);
            $ok = dcCaptcha::position_lettre($l, $nbr);
         }
         return array(sprintf(__('quel est %s caractère du mot "%s" ?'), __($ok), dcCaptcha::encode($str)), $str[$nbr]) ;
      }

      else //2, 3 : mot a completer
      {
         do{
            $str = dcCaptcha::mots();
            $l = strlen($str);
         }while ($l < 6);
         $chars = range(0, $l-1);
         shuffle($chars);
         $res = $str;

         $nbr = 1;
         for ($i=0;  $i < $nbr; $i++)
         {
            do {
               $j = array_pop($chars);
            } while( $res[$j] == ' ');
            $str[$j] = '*';
         }
         $str = sprintf(__('complétez le mot "%s" ...'), dcCaptcha::encode($str)) ;

         $str = str_replace('*', '<span style="color:red">*</span>', $str);
         return array($str , $res);
      }
   }



   function chiffre_mot_suivante()
   {
      $str = '';
      $nbr = rand(4, 10);

      $numbers = range(0,9);
      shuffle($numbers);
      for ($i=0;  $i < $nbr; $i++) $str .= array_pop($numbers);

      $f = rand(0, 1);
      if ($f)
      {
         $nbr = rand(0, $nbr-2);
         return array(dcCaptcha::encode('dans le nombre "'.$str.'", quel chiffre vient après '. dcCaptcha::nombres($str[$nbr]). '&nbsp;? (chiffres) ') , $str[1+$nbr]);
      }
      else
      {
         $nbr = rand(1, $nbr-1);
         return array(dcCaptcha::encode('dans le nombre "'.$str.'", quel chiffre vient avant '. dcCaptcha::nombres($str[$nbr]). '&nbsp;? (chiffres) ') , $str[$nbr-1]);
      }
   }



   function caractere_mot_suivante()
   {
      $str='';
      $l = 15;
      $nbr = rand(4, $l);

      $chars = range(0, 9);
      $chars = array_merge($chars, range('A', 'Z'));
      shuffle($numbers);
      for ($i=0;  $i < $nbr; $i++) $str.=array_pop($numbers);

      $nbr = rand(0, $nbr-1);
      $nbr = dcCaptcha::position_lettre($l, $nbr);

      return array(sprintf(__('quel est %s caractère du mot "%s" ?'), __($nbr), dcCaptcha::encode($str)) , $str[$nbr]);
   }



   function my_captcha()
   {
      if ( !empty($GLOBALS['my_captcha']) )
      {
         $temp = array();
         foreach($GLOBALS['my_captcha'] as $k => $v) $temp[] = array($k, $v);
         shuffle($temp);
         list($question, $sol) = array_pop($temp);
         return array($question , $sol);
      }
      else return dcCaptcha::lettre_mot();
   }



   function captcha_level($l = 0)
   {
      $l = intval($l);
      $GLOBALS['captcha_level'] = ( ($l < 0) || ($l > 2) ) ? 0 : $l;
   }



   function question($s='%s')
   {
      if ( !empty($GLOBALS['captcha_enable']) )
      {
         if ( empty($GLOBALS['captcha_level']) )
         {
            if ( !empty($GLOBALS['captcha_fonctions']) )
            {
               $fct_i = rand(0, count($GLOBALS['captcha_fonctions'])-1 );
               $fct = $GLOBALS['captcha_fonctions'][$fct_i];
            }
            else $fct = 'lettre_mot';

            $GLOBALS['dc_captcha_index'] = dcCaptcha::$fct();
            dcCaptcha::save_captcha();
            echo '<strong>' . __('QUESTION ANTI-SPAM') . '&nbsp;: </strong><br />';
            printf($s, $GLOBALS['dc_captcha_index'][0]);
         }
         else
         {
            $captcha_id = md5( uniqid(microtime()) );
            $GLOBALS['dc_captcha_index'] = array ($captcha_id, mt_rand(100000, 999999), 'gd');
            $url = $_SERVER['REQUEST_URI'];

            if (dc_url_scan == 'path_info')
            {
               if ( strpos(' '.$url, '?') )
                  $url = str_replace('?', '?img_captcha=' . $GLOBALS['dc_captcha_index'][0] .'&amp;', $url.'&amp;');
               else $url .= '?img_captcha=' . $GLOBALS['dc_captcha_index'][0] .'&amp;';
            }
            else
            {
               $url .= '&amp;img_captcha=' . $GLOBALS['dc_captcha_index'][0] .'&amp;';
            }

            if ( !function_exists('imagePng') && !function_exists('imageJpeg') ) $GLOBALS['captcha_level'] = 1;

            dcCaptcha::save_captcha();

            if ( $GLOBALS['captcha_level'] == 1 )
            {
               echo '<img src="'. $url . 'i=0" alt="' . str_replace('"', '', __('Si vous ne voyez aucun chiffre lisible, utilisez le formulaire de contact pour signaler le problème')) . '" border="0" />';
               echo '<img src="'. $url . 'i=1" alt="" border="0" />';
               echo '<img src="'. $url . 'i=2" alt="" border="0" />';
               echo '<img src="'. $url . 'i=3" alt="" border="0" />';
               echo '<img src="'. $url . 'i=4" alt="" border="0" />';
               echo '<img src="'. $url . 'i=5" alt="" border="0" />';
            }
            else
            {
               echo '<img src="'. $url . '" alt="' . str_replace('"', '', __('Si vous ne voyez aucun chiffre lisible, utilisez le formulaire de contact pour signaler le problème')) . '" title="' . str_replace('"', '', __('Si vous ne voyez aucun chiffre lisible, utilisez le formulaire de contact pour signaler le problème')) . '" border="0" />';
            }
            echo '<br /><strong>' . __('QUESTION ANTI-SPAM') . '&nbsp;: </strong>';
            echo __('recopiez le code numérique indiqué ci-dessus');
         }
      }
   }



   function save_captcha()
   {
      global $con, $blog;
      if ( empty($GLOBALS['captcha_enable']) || !isset($GLOBALS['dc_captcha_index'][1]) ) return;

      if ( !empty($GLOBALS['dc_captcha_index'][2]) )
      {
       $code = $GLOBALS['dc_captcha_index'][0];
       $q = $GLOBALS['captcha_level'] . '-' . $GLOBALS['dc_captcha_index'][1];
      }
      else
      {
         $q = md5(strtolower($GLOBALS['dc_captcha_index'][1]));
         $code = md5(uniqid(microtime()));
      }
      dcCaptcha::clear();

      $ip = !empty($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : getenv('REMOTE_ADDR');
      $browser = substr($_SERVER['HTTP_USER_AGENT'], 0, 100);

      $insReq = 'INSERT INTO '. DB_PREFIX . 'captcha '.
         '(captcha_code, captcha_solution, captcha_ip_address, captcha_user_agent, captcha_time) VALUES ('.
         '\''.$code.'\', '.
         '\''.$q.'\', '.
         '\'' . $con->escapeStr($ip) . '\', '.
         '\'' . $con->escapeStr($browser) . '\', '.
         time().
      ')';

      if (!$con->execute($insReq))
         $blog->setError('MySQL : '.$con->error(), 2000);
      $GLOBALS['captcha_code'] = $code;
  }



   function field()
   {
      global $con, $blog;
      if ( empty($GLOBALS['captcha_code']) ) return;
   //xxxxxxxxxxxxxx
      echo
      '<input name="dc_captcha" id="dc_captcha" type="text" title="captcha anti-spam" size="10" class="formInput" />' .
      '<input name="dc_captcha_code" value="' . $GLOBALS['captcha_code'] . '" type="hidden" />';
  }



   function clear($code='')
   {
      global $con;

      $strReq = 'DELETE FROM '. DB_PREFIX . 'captcha WHERE captcha_time <' . (time() - 60 * 60 * 24); //24h

      if ( !empty($code) )
         $strReq .= ' OR captcha_code=\'' . $con->escapeStr($code) . '\'';

      if (!$con->execute($strReq))
         return 0;
      return 1;
   }



   function check($md5, $value)
   {
      global $con;

      $ip = !empty($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : getenv('REMOTE_ADDR');
      $browser = substr($_SERVER['HTTP_USER_AGENT'], 0, 100);

//         'captcha_ip_address = \'' . $con->escapeStr($ip) . '\' AND '.

      $strReq = 'SELECT captcha_solution FROM ' . DB_PREFIX . 'captcha WHERE ' .
         'captcha_code = \'' . $con->escapeStr($md5) . '\' AND '.
         'captcha_user_agent = \'' . $con->escapeStr($browser) . '\' ';
         ;

      $ok = 0;
      if ( $rs = $con->select($strReq) )
      {
         if ( $rs->int_row_count > 0 )
         {
            $solution = $rs->f('captcha_solution');
            if ( strlen($solution) < 32 )
            {
               list($GLOBALS['captcha_level'], $solution) = split('-', $solution);
               $ok = $value == $solution;
            }
            else
            {
               $ok = md5(strtolower($value)) == $solution;
            }
            dcCaptcha::clear($md5);
         }
         else dcCaptcha::clear();
      }
      else $ok = 1;

      return $ok;
   }



   function make_gd_img($content = '')
   {
      $content = '  '. preg_replace( '/(\w)/', '\\1 ', $content) .' ';

      $temp_width= 135;
      $temp_height = 20;

      $image_width = 150;
      $image_height = 40;

      if ( function_exists('imageCreateTrueColor') )
      {
         $temp = imageCreateTrueColor($temp_width, $temp_height);
         $image  = imageCreateTrueColor($image_width, $image_height);
      }
      else
      {
         $temp = imageCreate($temp_width, $temp_height);
         $image  = imageCreate($image_width, $image_height);
      }

      $white  = imageColorAllocate($temp, 255, 255, 255);
      $black  = imageColorAllocate($temp, 0, 0, 0);
      $grey   = imageColorAllocate($temp, 210, 210, 210);
      $text_color = imageColorAllocate($temp, rand(0, 150), rand(0, 50), rand(0, 60));

      imageFill($temp, 0, 0, $white);

      $nbr_obj = rand(3, 5);
      for ( $i = 0; $i < $nbr_obj; $i++ )
      {
         $nbr_corners = rand(3, 20);
         $poly = array();
         for ( $j = 0; $j < $nbr_corners; $j++ )
         {
            $poly[] = rand(0, $temp_width);
            $poly[] = rand(0, $temp_height);
         }
         $color = imageColorAllocate($temp, rand(130, 255), rand(130,255), rand(130, 255));
         imageFilledPolygon($temp, $poly, $nbr_corners, $color);

      }

      imageString($temp, 5, 0, 2, $content, $text_color);
      imageCopyResized($image, $temp, 0, 0, 0, 0, $image_width, $image_height, $temp_width, $temp_height);
      imageDestroy($temp);

      $nbr_waves = rand(1, 3);
      $coef_wave = ($nbr_waves * 360) / $image_width;
      $maxY = $image_height-rand(0, $image_height/2);
      for ( $bit = 0; $bit <= 1; $bit++ )
      {
         $curX = 0;
         $curY = $bit ? 0 : $maxY;
         for($pt = 0; $pt < $image_width; $pt++)
         {
            $newX = $curX + 1;
            $newY = $bit
               ?($image_height/2) + (sin(deg2rad($newX * $coef_wave - 90)) * ($maxY/2))
               :($image_height/2) + (cos(deg2rad($newX * $coef_wave)) * ($maxY/2));
            ImageLine($image, $curX, $curY, $newX, $newY, $text_color);
            $curX = $newX;
            $curY = $newY;
         }
      }

      $nbr_obj = $image_width * $image_height / rand(5, 10);
      for ( $i = 0; $i < $nbr_obj; $i++ )
      {
         imageSetPixel($image, rand(0, $image_width), rand(0, $image_height), $black);
      }

      $type = function_exists('imageJpeg') ? 'jpeg' : 'png';
      @header('Content-Type: image/' . $type);
      @header('Cache-control: no-cache, no-store');
      ($type =='png') ?imagePng($image) : imageJpeg($image);
      ImageDestroy($image);

      exit();
   }

   function make_png_char($char)
   {
      $png = array(
         0 =>
         1 =>
         2 =>
         3 =>
         4 =>
         5 =>
         6 =>
         7 =>
         8 =>
         9 =>
      );
      @header('Content-Type: image/png');
      @header('Cache-control: no-cache, no-store');
      echo base64_decode($png[$char]);
      exit();
   }



   function show_captcha_img($code = '')
   {
      global $con;

      $ip = !empty($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : getenv('REMOTE_ADDR');
      $browser = substr($_SERVER['HTTP_USER_AGENT'], 0, 100);

//         'captcha_ip_address = \'' . $con->escapeStr($ip) . '\' AND '.

      $strReq = 'SELECT captcha_solution FROM ' . DB_PREFIX . 'captcha WHERE ' .
         'captcha_code = \'' . $con->escapeStr($code) . '\' AND '.
         'captcha_user_agent = \'' . $con->escapeStr($browser) . '\' ';

      if ( $rs = $con->select($strReq) )
      {
         if ( $rs->int_row_count > 0 )
         {
            $solution = $rs->f('captcha_solution');

            list($GLOBALS['captcha_level'], $solution) = split('-', $solution);
            if ( ($GLOBALS['captcha_level'] < 1) || ($GLOBALS['captcha_level'] > 2) ) return;

            if ( ($GLOBALS['captcha_level'] == 1) && isset($_GET['i']) )
            {
               $i = intval($_GET['i']);
               $number = substr($solution, $i, 1 );
               dcCaptcha::make_png_char($number);
            }
            else
            {
               dcCaptcha::make_gd_img($solution);
            }
         }
      }
   }
}

?>



Sinon pour voir tous les fichiers de ce plug-in de Dotclear, tu peux regarder là (si tu as le temps...) :
http://www.atelierphp5.com/pub.....ha-1.1.zip


Mille mercis par avance pour ton aide sur cette question épineuse.

J'aimerais vraiment savoir si cette table qui journalise ces connexions présente une menace de fermeture ou pas et si oui comment adapter le code en fonction... ?
Voir le profil de l'utilisateur Envoyer un message privé
MessagePosté le: Jeudi 1 Novembre 2007 18:36:47 Pas de caractéristiques de ligne pour un abonnement avec construction de ligne Répondre en citantReporter le post à l'équipe de modération
freemat
Webmaster
Webmaster


Hors-ligne

Inscrit le : 06 Mar 2004
Messages : 23595
Sexe :
Ville : Montargis

Forfait : Freebox Dégroupage Total avec construction de ligne
Freebox : v4r





Dans save_captcha :

dcCaptcha::clear();

=>
Code:

   function clear($code='')
   {
      global $con;

      $strReq = 'DELETE FROM '. DB_PREFIX . 'captcha WHERE captcha_time <' . (time() - 60 * 60 * 24); //24h

      if ( !empty($code) )
         $strReq .= ' OR captcha_code=\'' . $con->escapeStr($code) . '\'';

      if (!$con->execute($strReq))
         return 0;
      return 1;
   }

Donc les captcha stocké dans la base sont nettoyés si ils ont plus de 24 heures (et ce nettoyage est effectué à chaque enregistrement d'un nouveau captcha). Tu peux réduire le 24 heures en abaissant le 60 * 60 * 24.
_________________
Mat
[1] Posez votre question sur le forum en priorité, et non par messages privés Wink
[2] Evitez de poster votre propre problème dans le topic d'un autre membre
[3] Si votre problème est résolu, modifiez le statut de votre topic en bas de la page
Voir le profil de l'utilisateur Envoyer un message privé
MessagePosté le: Jeudi 1 Novembre 2007 19:34:02 Aucun numéro de ligne indiqué dans le profil Répondre en citantReporter le post à l'équipe de modération
sonia75
Intéressé
Intéressé

Hors-ligne

Inscrit le : 07 Juil 2006
Messages : 75
Sexe :

Forfait : Accès libre





Ok merci bien de ce décryptage de code !
Le problème c'est que si je comprends bien on ne peut pas les empêcher d'être stockés ?
Cela ne présente til pas un problème d'écriture dans la base non ?
A moins de mettre peut-être les valeurs "0"

Par ailleurs j'ai constaté que j'avais déjà "1949 enregistrements" dans cette table représentant un poids de 315.45 KB.
Je ne sais pas si c'est normal...
Voir le profil de l'utilisateur Envoyer un message privé
MessagePosté le: Jeudi 1 Novembre 2007 19:40:42 Pas de caractéristiques de ligne pour un abonnement avec construction de ligne Répondre en citantReporter le post à l'équipe de modération
freemat
Webmaster
Webmaster


Hors-ligne

Inscrit le : 06 Mar 2004
Messages : 23595
Sexe :
Ville : Montargis

Forfait : Freebox Dégroupage Total avec construction de ligne
Freebox : v4r





sonia75 a écrit:
Le problème c'est que si je comprends bien on ne peut pas les empêcher d'être stockés ?

Si pas stockés, alors les captcha ne fonctionneront pas.
Citation:
Par ailleurs j'ai constaté que j'avais déjà "1949 enregistrements" dans cette table représentant un poids de 315.45 KB.

Non, ça semble beaucoup. Affiche une page qui montre le captcha et va voir combien y'en a après.
_________________
Mat
[1] Posez votre question sur le forum en priorité, et non par messages privés Wink
[2] Evitez de poster votre propre problème dans le topic d'un autre membre
[3] Si votre problème est résolu, modifiez le statut de votre topic en bas de la page
Voir le profil de l'utilisateur Envoyer un message privé
 ADUF Index du Forum »  Pages perso & dl.free.fr Aller en haut de la page
Toutes les heures sont à l'heure légale française  
Page 4 sur 6  
Aller à la page Précédente  1, 2, 3, 4, 5, 6  Suivante
  
Sauter vers:  
Répondre au sujet  


Déclaration CNIL n°1012304 Partiellement basé sur phpBB © 2001, 2006 phpBB Group Traduction par : phpBB-fr.com