【问题标题】:Verify reCaptcha V2 : Always false验证 reCaptcha V2:始终为假
【发布时间】:2018-05-09 12:26:47
【问题描述】:

我正在尝试将 Google 的 reCaptcha V2 植入我的网站(使用 PHP 和 Wordpress 开发)。

我正在尝试验证用户是否在提交之前检查了此验证码。

这是我的验证:

<?php

if(isset($_POST['g-recaptcha-response']) && !empty($_POST['g-recaptcha-response'])){
  $privatekey = $secret;
  $captcha = $_POST['g-recaptcha-response'];
  $url = 'https://www.google.com/recaptcha/api/siteverify';
  $data = array(
      'secret' => $privatekey,
      'response' => $captcha,
      'remoteip' => $_SERVER['REMOTE_ADDR']
  );

  $curlConfig = array(
      CURLOPT_URL => $url,
      CURLOPT_POST => true,
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_POSTFIELDS => $data
  );

  $ch = curl_init();
  curl_setopt_array($ch, $curlConfig);
  $response = curl_exec($ch);
  curl_close($ch);
  $jsonResponse = json_decode($response);
  if ($jsonResponse->success == true) {
            $succMsg = 'Your contact request have submitted successfully.';
            echo "<script>alert(\"OK\")</script>";
  }
  else {
      $errMsg = 'Robot verification failed, please try again.';
            echo "<script>alert(\"KO ROBOT\")</script>";
    }
}
else{

  $errMsg = 'Please click on the reCAPTCHA box.';
    echo "<script>alert(\"KO CLICK ON BOX\")</script>";
}
?>

当我重新加载页面时,或者当我在没有检查验证码的情况下提交时,或者当我检查验证码时,它总是显示:"KO ROBOT"

我也尝试过使用"file_get_contents" 而不是 curl,但我收到了 SSL 错误警告。

谢谢。

更新:

当我这样做时:

var_dump($jsonResponse);

我的页面上有这个:

object(stdClass)#4028 (2) { ["success"]=> bool(false) ["error-codes"]=> array(1) { [0]=> string(20) "invalid-input-secret" } }

更新 2:

现在我有了这个,在验证了我的密钥之后:

object(stdClass)#4028 (2) { ["success"]=> bool(false) [“错误代码”]=> 数组(1){ [0]=> 字符串(20)“超时或重复”} }

【问题讨论】:

  • var_dump($jsonResponse); - 你应该在那里看到错误。
  • 你为什么要重新验证?如果$_POST['g-recaptcha-response'] 存在,那么它不是机器人,否则是机器人
  • $_POST['g-recaptcha-response'] 的值可以伪造。
  • 嘿 @Mr.Blue ,我有一个 var_dump : object(stdClass)#4028 (2) { ["success"]=> bool(false) ["error-codes"]= > 数组(1){ [0]=> 字符串(20)“无效输入秘密”} }
  • 如果是这种情况,请使用正确的secret key。还要在表单中使用正确的site key

标签: php wordpress captcha verification


【解决方案1】:

试试这个,只需替换密钥。

<?php
$response   = isset($_POST["g-recaptcha-response"]) ? $_POST['g-recaptcha-response'] : null;
$privatekey = "YOUR PRIVATE KEY";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.google.com/recaptcha/api/siteverify");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
    'secret' => $privatekey,
    'response' => $response,
    'remoteip' => $_SERVER['REMOTE_ADDR']
));

$resp = json_decode(curl_exec($ch));
curl_close($ch);

if ($resp->success) {

} else {

    //failed return mess
}
?>

【讨论】:

  • 谢谢兄弟,你有一个很好的答案。现在它可以工作了,感谢您的时间。
  • 你能解释一下你的答案吗?我想明白这一点:)
猜你喜欢
  • 2015-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-10
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
  • 2015-06-15
相关资源
最近更新 更多