代码之家  ›  专栏  ›  技术社区  ›  Aishwaryas

使用PHP的google recpatcha的问题

  •  2
  • Aishwaryas  · 技术社区  · 6 年前

    我在用 google recaptcha 在我的网站查询表。我用卷发而不是 file_get_contents() ,因为我的服务器 允许打开url 由于安全问题而被禁用。下面是我的代码来验证recaptcha:

            <?php
            $response=htmlspecialchars($_POST["captcha"]);
            $secret = "my_secret_key";
            $curl = curl_init();
    
            $captcha_verify_url = "https://www.google.com/recaptcha/api/siteverify";
    
            curl_setopt($curl, CURLOPT_URL,$captcha_verify_url);
            curl_setopt($curl, CURLOPT_POST, true);
            curl_setopt($curl, CURLOPT_POSTFIELDS, "secret=".$secret."&response=".$response);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    
            $captcha_output = curl_exec ($curl);
            curl_close ($curl);
            $decoded_captcha = json_decode($captcha_output);
            $captcha_status = $decoded_captcha['success']; // store validation result to a variable.
            if($captcha_status === FALSE){
              echo "fail";
            }
            else
            {
              echo "success";
            }
            ?>
    

    google_verify_url 我得到了成功的回应。我不明白发生了什么。我这边有什么问题吗?

    2 回复  |  直到 6 年前
        1
  •  2
  •   T K    6 年前

    当您用错误的参数发送请求时,curl的响应将是 NULL FALSE ,这就是为什么它总是返回 success

    $response = htmlspecialchars($_POST["captcha"]);
    $secret = "my_secret_key";
    $curl = curl_init();
    
    $captcha_verify_url = "https://www.google.com/recaptcha/api/siteverify";
    
     curl_setopt($curl, CURLOPT_URL, $captcha_verify_url);
     curl_setopt($curl, CURLOPT_POST, true);
     curl_setopt($curl, CURLOPT_POSTFIELDS, "secret=".$secret."&response=".$response);
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    
     $captcha_output = curl_exec($curl);
     curl_close ($curl);
    
     $decoded_captcha = json_decode($captcha_output, TRUE); // Changed the second parameter 
     $captcha_status = $decoded_captcha['success'];
    
     if($captcha_status == NULL){ // Changed False to Null
       echo "fail";
     } else {
       echo "success";
     }
    
        2
  •  0
  •   Khoa TruongDinh    6 年前

    http://php.net/manual/en/function.json-decode.php

    assoc为TRUE时,返回的对象将转换为关联对象 阵列。

    $decoded_captcha = json_decode($captcha_output, true);
    

    try {
     ......
    } catch (Throwable $exception) {
       echo $exception;
    }