简体   繁体   English

如何在服务器请求方法中验证 recaptcha 响应测试?

[英]How do I verify recaptcha response test in server request method?

I have the code from below, once the form is sended I want to check in it if the user passed the recaptcha test.我有下面的代码,一旦发送表单,我想检查它是否用户通过了recaptcha 测试。 How do i do it?我该怎么做? Searched many things and i can't find a way that works for me..搜索了很多东西,我找不到适合我的方法..

<html>
  <head>
        <script type="text/javascript">
        
        var verifyCallback = function(response) {
           alert(response);
        };
    
          var onloadCallback = function() {
            grecaptcha.render('example3', {
              'sitekey' : '6LdlRIgaAAAAAJXOu3EsuGVnKVjmSaWfSbuwSHLI',
              'callback' : verifyCallback,
              'theme' : 'dark'
            });
          };
          
        </script>
  </head>

  <body>
      
      <?php
        if ($_SERVER['REQUEST_METHOD'] == 'POST')
        {
            // here I want to verify if the use user passed the recaptcha
            {
                some code
            }
        }
      ?>
 
    <form method="POST">
      <div id="example3"></div>
      <br>
      <input type="submit" value="Submit">
    </form>
    
    <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit"
        async defer>
    </script>
    
  </body>
</html>

You should lookup the Server side validation docs for reCAPTCHA: https://developers.google.com/recaptcha/docs/verify您应该查找 reCAPTCHA 的服务器端验证文档: https://developers.google.com/recaptcha/docs/verify

You have to send an API request via PHP CURL, as stated in the docs:您必须通过 PHP CURL 发送 API 请求,如文档中所述:

URL: https://www.google.com/recaptcha/api/siteverify METHOD: POST

So something like this:所以是这样的:

function validate_captcha($secret, $response, $remoteip) {

    $captcha_url = "https://www.google.com/recaptcha/api/siteverify";
    $captcha_url .= "?secret=".$secret;
    $captcha_url .= "&response=".$response;
    $captcha_url .= "&remoteip=".$remoteip;
    
    $ch = curl_init($captcha_url);

    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    
    $data = curl_exec($ch);
    
    curl_close($ch);
     
    $response=json_decode($data,true);
    
    if ($response["success"]) {
        return true;
    }
    else {
        return false;
    }

}

And you call the function like this:你这样称呼 function :

$captcha_is_ok = validate_captcha(
  "......mySecret.....", 
  $_POST['g-recaptcha-response'],
  $_SERVER['REMOTE_ADDR']);

if ($captcha_is_ok) {
  ... do something cool ...
} else {
  ... don't do something cool ...
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM