Search code examples
phprecaptcharecaptcha-v3

How to validate Google reCAPTCHA v3 on server side?


I've just set up the new google recaptcha with checkbox, it's working fine on front end, however I don't know how to handle it on server side using PHP. I've tried to use the old code below but the form is sent even if the captcha is not valid.

require_once('recaptchalib.php');
$privatekey = "my key";
$resp = recaptcha_check_answer ($privatekey,
        $_SERVER["REMOTE_ADDR"],
        $_POST["recaptcha_challenge_field"],
        $_POST["recaptcha_response_field"]);

if (!$resp->is_valid) {
 $errCapt='<p style="color:#D6012C ">The CAPTCHA Code wasnot entered correctly.</p>';}

Solution

  • this is solution

    index.html

    <html>
      <head>
        <title>Google recapcha demo - Codeforgeek</title>
        <script src='https://www.google.com/recaptcha/api.js'></script>
      </head>
      <body>
        <h1>Google reCAPTHA Demo</h1>
        <form id="comment_form" action="form.php" method="post">
          <input type="email" placeholder="Type your email" size="40"><br><br>
          <textarea name="comment" rows="8" cols="39"></textarea><br><br>
          <input type="submit" name="submit" value="Post comment"><br><br>
          <div class="g-recaptcha" data-sitekey="=== Your site key ==="></div>
        </form>
      </body>
    </html>
    

    verify.php

    <?php
        $email; $comment; $captcha;
    
        if(isset($_POST['email']))
            $email=$_POST['email'];
        if(isset($_POST['comment']))
            $comment=$_POST['comment'];
        if(isset($_POST['g-recaptcha-response']))
            $captcha=$_POST['g-recaptcha-response'];
    
        if(!$captcha){
            echo '<h2>Please check the the captcha form.</h2>';
            exit;
        }
    
        $response = json_decode(file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=YOUR SECRET KEY&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']), true);
        if($response['success'] == false)
        {
            echo '<h2>You are spammer ! Get the @$%K out</h2>';
        }
        else
        {
            echo '<h2>Thanks for posting comment.</h2>';
        }
    ?>
    

    http://codeforgeek.com/2014/12/google-recaptcha-tutorial/