Heim  >  Fragen und Antworten  >  Hauptteil

Wie verifiziert man Google reCAPTCHA v3 serverseitig?

<p>Ich habe gerade das neue Google Captcha mit Kontrollkästchen eingerichtet und es funktioniert im Frontend einwandfrei, aber ich weiß nicht, wie ich es auf der Serverseite mit PHP handhaben soll. Ich habe versucht, den alten Code unten zu verwenden, aber das Formular wird gesendet, obwohl der Bestätigungscode ungültig ist. </p> <pre class="brush:php;toolbar:false;">require_once('recaptchalib.php'); $privatekey = "mein Schlüssel"; $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 ">Der CAPTCHA-Code wurde nicht korrekt eingegeben.</p>';}</pre> <p><br /></p>
P粉904191507P粉904191507442 Tage vor641

Antworte allen(2)Ich werde antworten

  • P粉297434909

    P粉2974349092023-08-28 12:23:43

    私钥安全

    虽然这里的答案肯定有效,但它们使用 GET 请求,这会暴露您的私钥(即使使用 https )。在 Google Developers 上,指定的方法是 POST< /代码>

    有关更多详细信息:https://stackoverflow.com/a/323286/1680919

    通过 POST 验证

    function isValid() 
    {
        try {
    
            $url = 'https://www.google.com/recaptcha/api/siteverify';
            $data = ['secret'   => '[YOUR SECRET KEY]',
                     'response' => $_POST['g-recaptcha-response'],
                     'remoteip' => $_SERVER['REMOTE_ADDR']];
                     
            $options = [
                'http' => [
                    'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
                    'method'  => 'POST',
                    'content' => http_build_query($data) 
                ]
            ];
        
            $context  = stream_context_create($options);
            $result = file_get_contents($url, false, $context);
            return json_decode($result)->success;
        }
        catch (Exception $e) {
            return null;
        }
    }

    数组语法:我使用“新”数组语法([] 而不是 array(..)< /代码>)。如果您的 php 版本尚不支持此功能,您将必须相应地编辑这 3 个数组定义(请参阅评论)。

    返回值:如果用户有效,则此函数返回 true;如果无效,则返回 false;如果用户有效,则返回 null如果发生错误。例如,您可以简单地通过编写 if (isValid()) { ... }

    来使用它

    Antwort
    0
  • P粉262113569

    P粉2621135692023-08-28 10:59:16

    这是解决方案

    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>

    验证.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 /

    Antwort
    0
  • StornierenAntwort