Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème CAPTCHA

    24 janvier 2017 à 13:21:20

    Bonjour,

    J'ai créé une page "Témoignages" sur un site, avec un formulaire qui contient un “pseudo” & un “message” ainsi qu'un bouton “soumettre” pour envoyer le témoignage sur un BDD.

    En début de page, j'ai écrit les clés de google:

    <?php
    require 'recaptchalib.php'; // fichier “recaptchalib.php” inclus dans le même dossier que ma page .php 
    $siteKey = 'XXXX'; // clé publique
    $secret = 'YYYY'; // clé privée
    ?>

    J'ai ajouté le script suivant dans les balises <head>...</head> : 

    <script src="https://www.google.com/recaptcha/api.js"></script>

    Puis pour faire apparaitre le widget, j'ai mis le code suivant dans les balises <form>...</form> :

    <div class="g-recaptcha" data-sitekey="<?php echo $siteKey; ?>"></div>

    Et en dernier, pour vérifier la validation du formulaire, j'ai inclus le code suivant dans <body>...</body>:

    <?php
    $reCaptcha = new ReCaptcha($secret);
    if(isset($_POST["g-recaptcha-response"])) {
        $resp = $reCaptcha->verifyResponse(
            $_SERVER["REMOTE_ADDR"],
            $_POST["g-recaptcha-response"]
            );
        if ($resp != null && $resp->success) {echo "OK";}
        else {echo "CAPTCHA incorrect";}
        }
    ?>


    Mais, malgré ce widget, j'ai plusieurs message (incompréhensibles) sûrement envoyés par des bots!

    J'ai un message d'erreur si je ne remplie pas le formulaire, ce qui est normal, mais le message est envoyé, que je coche OU NON le CAPTCHA...

    • Partager sur Facebook
    • Partager sur Twitter
      24 janvier 2017 à 13:30:03

      Bryceos a écrit:

      Bonjour,

      J'ai créé une page "Témoignages" sur un site, avec un formulaire qui contient un “pseudo” & un “message” ainsi qu'un bouton “soumettre” pour envoyer le témoignage sur un BDD.

      En début de page, j'ai écrit les clés de google:

      <?php
      require 'recaptchalib.php'; // fichier “recaptchalib.php” inclus dans le même dossier que ma page .php 
      $siteKey = 'XXXX'; // clé publique
      $secret = 'YYYY'; // clé privée
      ?>

      J'ai ajouté le script suivant dans les balises <head>...</head> : 

      <script src="https://www.google.com/recaptcha/api.js"></script>

      Puis pour faire apparaitre le widget, j'ai mis le code suivant dans les balises <form>...</form> :

      <div class="g-recaptcha" data-sitekey="<?php echo $siteKey; ?>"></div>

      Et en dernier, pour vérifier la validation du formulaire, j'ai inclus le code suivant dans <body>...</body>:

      <?php
      $reCaptcha = new ReCaptcha($secret);
      if(isset($_POST["g-recaptcha-response"])) {
          $resp = $reCaptcha->verifyResponse(
              $_SERVER["REMOTE_ADDR"],
              $_POST["g-recaptcha-response"]
              );
          if ($resp != null && $resp->success) {echo "OK";}
          else {echo "CAPTCHA incorrect";}
          }
      ?>


      Mais, malgré ce widget, j'ai plusieurs message (incompréhensibles) sûrement envoyés par des bots!

      J'ai un message d'erreur si je ne remplie pas le formulaire, ce qui est normal, mais le message est envoyé, que je coche OU NON le CAPTCHA...


      Tu as une classe Captcha ? J'ai fait ça pour un site et il faut être bien sur que tu testes ton Captcha ... je t'envoie en vrac le code que j'avais pour un envoi de mail et la classe que j'ai trouvé sur le site de google ...

      <?php 
          // This is usefull to protect our form
          require 'recaptcha-master/src/autoload.php';
      
          // Captcha data
          $googleSiteKey = 'blablabla';
          $googleSecretKey = 'Le truc que tu ne devineras jamais';
      
          // We will need this to show an alert for our user
          $alert = -1;
      
          // Sending email
          if(!empty($_POST)){
              // We clean our variables
              $senderName = htmlspecialchars($_POST['sender_name']);
              $senderMail = htmlspecialchars($_POST['sender_email']);
              $senderSubject = htmlspecialchars($_POST['sender_subject']);
              $senderMessage = htmlspecialchars($_POST['sender_message']);
              $recaptchaResponse = htmlspecialchars($_POST['g-recaptcha-response']);
      
              // We will send this later
              $to = 'mr.presedent@outlook.com';
              $subject = 'You have a new email sent from your website';
              $message = '';
      
              // Message site actuel : thank you,we will contact you in 24h.
      
              // If every parameter exists and is not empty we send email.
              if(!empty($senderName) and !empty($senderMail) and !empty($senderSubject) and !empty($senderMessage) and !empty($recaptchaResponse)) {
                  $message = 'Sender Name = '.$senderName.'\nReply to = '.$senderMail.'\nSubject = '.$senderSubject.'\nMessage = '.$senderMessage;
                  
                  $recaptcha = new \ReCaptcha\ReCaptcha($googleSecretKey);
                  $resp = $recaptcha->verify($recaptchaResponse, $_SERVER['REMOTE_ADDR']);
      
                  if($resp->isSuccess()){
                      /*
                      $sent = mail($to, $subject, $message);
                      if($sent){
                          $alert =  '<div class="alert alert-success centered-font">'.$message.'</div>';
                      }*/
                      $alert =  '<div class="alert alert-success centered-font">'.$message.'</div>';
                  } else {
                      $alert = '<div class="alert alert-danger centered-font">'."An error occured, please try again.".'</div>';
                  }
              } else {
                  $alert = '<div class="alert alert-danger centered-font">'."An error occured, please try again.".'</div>';
              }
          }
      ?>


      Ce code était tout en haut de la page avant toute balise html. Et pour avoir la classe de google captcha tu dois télécharger le dossier : https://github.com/google/recaptcha et la tu as la classe Recaptcha utilisée plus haut.

      Très en vrac tout ça mais j'espère que ca puisse t'aider.

      • Partager sur Facebook
      • Partager sur Twitter
        24 janvier 2017 à 13:59:32

        rusgrechka a écrit:

        <?php 
            // This is usefull to protect our form
            require 'recaptcha-master/src/autoload.php';
        
            // Captcha data
            $googleSiteKey = 'blablabla';
            $googleSecretKey = 'Le truc que tu ne devineras jamais';
        ?>


        Ce code était tout en haut de la page avant toute balise html. Et pour avoir la classe de google captcha tu dois télécharger le dossier : https://github.com/google/recaptcha et la tu as la classe Recaptcha utilisée plus haut.


        Merci de ta réponse rapide. Alors moi j'ai téléchargé le fichier et inclus « require 'recaptchalib.php'; » (visible ici: recaptchalib.php) tout en haut de ma page, avant les clés.
        • Partager sur Facebook
        • Partager sur Twitter
          24 janvier 2017 à 14:58:45

          Bryceos a écrit:

          rusgrechka a écrit:

          <?php 
              // This is usefull to protect our form
              require 'recaptcha-master/src/autoload.php';
          
              // Captcha data
              $googleSiteKey = 'blablabla';
              $googleSecretKey = 'Le truc que tu ne devineras jamais';
          ?>


          Ce code était tout en haut de la page avant toute balise html. Et pour avoir la classe de google captcha tu dois télécharger le dossier : https://github.com/google/recaptcha et la tu as la classe Recaptcha utilisée plus haut.


          Merci de ta réponse rapide. Alors moi j'ai téléchargé le fichier et inclus « require 'recaptchalib.php'; » (visible ici: recaptchalib.php) tout en haut de ma page, avant les clés.

          Ca commence bien :D Tu as vu cette partie de mon code : 
          $recaptcha = new \ReCaptcha\ReCaptcha($googleSecretKey);
                      $resp = $recaptcha->verify($recaptchaResponse, $_SERVER['REMOTE_ADDR']);
           
                      if($resp->isSuccess()){
                          // Tes actions
          }

          ??? J'ai été voir dans mon site et j'avais inclus tout le zip du repository github avec ce recaptcha pas seulement la classe en question. A mon avis cette classe a des dépendances vis a vis des autres fichiers du repository. En gros Télécharge tout met le dans ton site et fais un require de la classe comme je l'ai fait. Ensuite fais le code qui fait appel à ta classe Recaptcha pour vérifier ta clé $googleSecretKey comme je t'ai mis dans mon exemple et tout devra aller comme sur des roulettes.

          Si tu as encore des erreurs, reviens nous voir ici :)

          • Partager sur Facebook
          • Partager sur Twitter

          Problème CAPTCHA

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown