web-dev-qa-db-ja.com

Google Recaptchav3をPHP形式で実装するにはどうすればよいですか?

Recaptchaの新しいバージョン(V3)から連絡先を挿入したいと思います。

さまざまな解決策を探しましたが、コードの一部しか表示されないか、不完全であるか、エラーが発生します。見つかった解決策のほとんどは、非常に単純なもののために非常に複雑であり、コードを理解していません。

3
kikerrobles

このフォーラムや他のフォーラムを検索して、新しいバージョンのReCaptcha(V3)をフォームに実装しました。私は次の方法を知る必要がありました:

  • JSで挿入
  • PHPでそれを検証する方法
  • 私のフォームにはどのような新しいフィールドが必要でしたか。

これらすべてのポイントを示す簡単な解決策は見つかりませんでした。または、Webサイトに連絡フォームを挿入したいだけの人にとっては複雑すぎました。

最後に、複数のソリューションのコード部分をいくつか取り上げて、対応するキーを挿入するだけでよい、シンプルで再利用可能なコードを使用します。

ここにあります。

基本的なJSコード

<script src="https://www.google.com/recaptcha/api.js?render=your reCAPTCHA site key here"></script>
<script>
    grecaptcha.ready(function() {
    // do request for recaptcha token
    // response is promise with passed token
        grecaptcha.execute('your reCAPTCHA site key here', {action:'validate_captcha'})
                  .then(function(token) {
            // add token value to form
            document.getElementById('g-recaptcha-response').value = token;
        });
    });
</script>

基本的なHTMLコード

<form id="form_id" method="post" action="your_action.php">
    <input type="hidden" id="g-recaptcha-response" name="g-recaptcha-response">
    <input type="hidden" name="action" value="validate_captcha">
    .... your fields
</form>

基本的なPHPコード

    if(isset($_POST['g-recaptcha-response'])){
        $captcha=$_POST['g-recaptcha-response'];
    }
    else
        $captcha = false;

    if(!$captcha){
        //Do something with error
    }
    else{
        $secret = 'Your secret key here';
        $response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=
            .$secret.&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']);
        if($response.success==false)
        {
            //Do something with error
        }
    }

   //... The Captcha is valid you can continue with the rest of your code
  //... Add code to filter access using $response . score
    if ($response.success==true && $response->score <= 0.5) {
        //Do something to denied access
    }

$ response.scoreの値を使用してアクセスをフィルタリングする必要があります。 0.0から1.0までの値を取ることができます。ここで、1.0はサイトとの最良のユーザーインタラクションを意味し、0.0は(ボットのような)最悪のインタラクションを意味します。 ReCaptchaドキュメント でいくつかの使用例を見ることができます。

キーを追加するだけで、変更は不要です。

    src="https://www.google.com/recaptcha/api.js?render=your reCAPTCHA site key here"    
    grecaptcha.execute('your reCAPTCHA site key here'

そして

    $secret = 'Your secret key here';

明らかに、この例では、フォームのアクションも変更する必要があります。

    action = "your_action.php"
16
kikerrobles