新的 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 应用程序