Wie verifiziert man Google reCAPTCHA v3 serverseitig?
P粉904191507
P粉904191507 2023-08-27 16:48:47
0
2
655
<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粉904191507
P粉904191507

Antworte allen(2)
P粉297434909

私钥安全

虽然这里的答案肯定有效,但它们使用 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()) { ... }

来使用它
P粉262113569

这是解决方案

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 /

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage