新的 Google ReCaptcha 实施和提交前检查

Posted

技术标签:

【中文标题】新的 Google ReCaptcha 实施和提交前检查【英文标题】:New Google ReCaptcha Implementation And checking before submit 【发布时间】:2015-02-25 11:39:40 【问题描述】:

我是 php、jQuery 和 AJAX 的新手。

我正在尝试实施新的 Google Recapcha。

看起来像-

点击后-

并且经过验证-

而index.php的代码是-

<html>
<head>
    <title>Google recapcha demo - Codeforgeek</title>
</head>
<body>
    <h1>Google reCAPTHA Demo</h1>
    <form id="comment_form" action="received.php" method="post">
        <input type="email" placeholder="Type your email" size="40"><br><br>
        <textarea name="comment" rows="8" cols="39"></textarea><br><br>
        <!-- ---------------------------------------Capcha Start------------------------------------- -->
            <script src='https://www.google.com/recaptcha/api.js'></script>
            <?php $siteKey="6LdLqv8SAAAAADT3YEjm6ONCwnPD95frMSZ92Ftv" ?>
            <div class="g-recaptcha" data-sitekey="<?php echo $siteKey; ?>"></div>
        <!-- ----------------------------------------Capcha End------------------------------------ -->
        <br><br>
        <input type="submit" name="submit" value="Post comment"><br><br>
    </form>
</body>
</html>

以及收到的部分——received.php

<?php
//////////////////////////////////////////Check Capch Function Start
function CapchaCheck()

    $captcha;
    if(isset($_POST['g-recaptcha-response']))
    
        $captcha=$_POST['g-recaptcha-response'];
    
    if(!$captcha)
    
        return false;
    
    $secreatKey="6LdLqv8SAAAAAIWxKcn2zIKjWau2Mdz6yzE3Kkcm";
    $response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$secreatKey."&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']);
    var_dump($response);
    if($response.success==false)
    
        return false;
    
    else
    
        return true;
    

//////////////////////////////////////////Check ReCaptcha Function End

if(CapchaCheck())

    echo '<h2>Thanks for posting comment.</h2>';

else

    echo '<h2>You are spammer ! Get the @$%K out</h2>';

?>

效果很好。

但我不想在提交后检查 ReCapcha 是否正确。如果 ReCaptcha 错误,我想阻止用户提交。

所以,我想我需要 jQuery。

但我不知道如何实现。

谁能帮帮我。

提前感谢您的帮助。

【问题讨论】:

这里有一个答案:***.com/a/28044629/2022751 这个问题是在你的问题之后 :) 您可能希望从示例代码中删除“secreatKey”,因为这对黑客来说很方便... 【参考方案1】:

本页介绍了如何在您的网页上显示和自定义 reCAPTCHA 小部件。

developers.google.com/recaptcha/docs/display

回调函数可用于控制检查用户输入后发生的行为。

【讨论】:

不,我已经这样做了。我已经提供了代码。我需要它与 AJAX。 NP。感谢您的帮助 我也有这个问题@Abrar Jahin 此代码有效(我在此处提供的代码)。您只需将“$sitekey”更改为您自己的,它就可以正常工作。如果你想在提交前检查它,你应该使用 AJAX。它会解决你的问题。谢谢 稍后我会在可以实现的时候用 AJAX 添加答案。谢谢【参考方案2】:

使用它通过简单的 javascript 验证 google recaptcha在客户端站点 100% 工作验证

html正文中的这段代码:

<div class="g-recaptcha" id="rcaptcha" style="margin-left: 90px;" data-sitekey="my_key"></div>
 <span id="captcha" style="margin-left:100px;color:red" />

这段代码放在调用get_action(this)方法表单按钮的头部:

function get_action(form) 
var v = grecaptcha.getResponse();
if(v.length == 0)

    document.getElementById('captcha').innerHTML="You can't leave Captcha Code empty";
    return false;

if(v.length != 0)

    document.getElementById('captcha').innerHTML="Captcha completed";
    return true; 


【讨论】:

在客户端验证 CAPTCHA?你在开玩笑吧?是什么阻止垃圾邮件发送者撕掉您的“验证”并始终返回 true? @OlegV.Volkov 哦,但它只会变得更糟。响应根本没有经过验证;接受任何非空响应 (v.length != 0)! 这段代码对我有用,我在我的项目中使用过......它也适用于其他我有评论说它使用客户端站点验证而不是响应验证...... @PravinSharma 我有点晚了,但仍然想回复。他们并不是说它不起作用,只是说它不安全。它违背了验证码的全部目的。我们不是试图阻止真实的人,我们试图阻止可以越过任何客户端的机器人。所以在客户端这样做你可能还没有验证码。【参考方案3】:
function reCaptchaServerControl() 
var reCaptchaResponse = $("#g-recaptcha-response").val();
if (reCaptchaResponse) 
    $.ajax(
        type: 'POST',
        url: "submitContact.php", 
        dataType: 'html',
        async: true,
        data: response : reCaptchaResponse ,
        success: function(serverResponse)  
            //alert(serverResponse);
            var serverResponse = $.parseJSON(serverResponse);
          ,
            error: function (XMLHttpRequest, textStatus, errorThrown) 
                //alert("Error");
            
        );
     else 
        //alert("error");
        

【讨论】:

以上是关于新的 Google ReCaptcha 实施和提交前检查的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Google Recaptcha v2 实施到限制访问 Google Recaptcha 的 Web 应用程序

如何隐藏 Google Invisible reCAPTCHA 徽章

Google reCAPTCHA 第二次提交失败

Google Recaptcha 启用禁用的提交按钮

为啥 Google ReCaptcha 不阻止提交表单?

新的 Google reCAPTCHA 一直无法通过 localhost 进行验证