用PHP和jQuery验证ReCaptcha
ReCaptcha validation with both PHP and jQuery
我想做一个好的注册表格。首先,我编写了一个PHP验证脚本,因为我确信它是安全的。当我错误地发布表单并返回错误时,所有输入值都消失了。我不喜欢这样,所以我学习了用Javascript进行验证。我没有太多的经验与Javascript,但我已经设法验证我的表单与客户端和服务器端验证,除了ReCaptcha字段。
问题是,如果我正确填写代码并按提交,客户端验证返回"成功",但服务器端验证总是返回"错误"。
如果我只验证与服务器端脚本,它会返回"成功",虽然,所以脚本本身是好的,但不知何故,他们不会工作后彼此使用相同的代码。
客户端验证脚本:
function validateCaptcha()
{
challengeField = $("input#recaptcha_challenge_field").val();
responseField = $("input#recaptcha_response_field").val();
//console.log(challengeField);
//console.log(responseField);
//return false;
var html = $.ajax({
type: "POST",
url: "handlers/ajax.recaptcha.php",
data: "recaptcha_challenge_field=" + challengeField + "&recaptcha_response_field=" + responseField,
async: false
}).responseText;
//console.log( html );
if(html == "success") {
//Add the Action to the Form
$("form").attr("action", "handlers/register_handler.php");
//Indicate a Successful Captcha
$("#captchaStatus").html("Success!");
// Uncomment the following line in your application
return true;
} else {
$("#captchaStatus").html("The security code you entered did not match. Please try again.");
Recaptcha.reload();
return false;
}
}
ajax.recaptcha.php
<?php
require_once('recaptchalib.php');
$privatekey = "private key";
$resp = recaptcha_check_answer ($privatekey,
$_SERVER["REMOTE_ADDR"],
$_POST["recaptcha_challenge_field"],
$_POST["recaptcha_response_field"]);
if ($resp->is_valid) {
echo "success";
} else {
die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." .
"(reCAPTCHA said: " . $resp->error . ")");
}
?>
服务器端验证脚本:
require_once('recaptchalib.php');
$privatekey = "private key";
$resp = recaptcha_check_answer ($privatekey,
$_SERVER["REMOTE_ADDR"],
$_POST["recaptcha_challenge_field"],
$_POST["recaptcha_response_field"]);
if (!$resp->is_valid) {
echo "error"; }
else { echo "succes"; }
它们几乎都一样,所以我真的不知道我在这里做错了什么。
请帮助我,因为我不想再输入所有的信息,当我只有Captcha码错。
Thanks in advance
编辑:我发现,客户端验证和服务器端验证使用相同的挑战字段代码。也许它不会工作,因为挑战字段代码只能使用一次?如果是这样,有没有办法让我这样做?
reCaptcha有意拒绝多次提交给其服务器的captcha(例如,通过客户端和服务器端验证)。您需要咬紧牙关,重新编写register_handler.php
脚本,以便重新显示表单输入或将其写入AJAX操作。
首先,我认为您不需要这两个看起来非常相似的脚本。
你想要实现的是让jQuery做一个部分post-back通过ajax检查与服务器,如果正确继续提交表单。到目前为止,这似乎工作得很好,除了你想设置async: true
。
当答案返回而不是"success"时,更好的方法是返回您在这一行中设置的操作:
$("form").attr("action", "handlers/register_handler.php");
目前任何人都可以通过简单地检查来源并构建自己的handlers/register_handler.php
请求来绕过您的captcha。
我偶然发现了这个,我相信它会有帮助。
当然,我可能理解错了你想要达到的目标。如果是这样,是否可以将您的问题托管到某个地方?这里有一个不同的想法:如果表单提交失败,可以用用户提交的数据重新填充表单。使用session或任何您想用用户提交的数据重新填充表单的方法
- 正在验证8个真/假复选框或复选框中的2个
- 借助asp.net验证或java脚本对多个文本进行验证
- Recaptcha在IE7和IE8中不起作用
- jQuery自定义验证比较多个输入的序列
- 使用html中的外部javascript进行数据验证
- 在FrontEndphp-ajax-jquery中验证reCaptcha-google
- 使用ajax验证的reCAPTCHA总是返回错误,即使是正确的
- reCaptcha-验证失败
- PHP表单,MailFoction和Google reCaptcha验证问题
- 通过将 g-recaptcha-response 从 javascript 文件传递给 php 文件来验证 google
- 使用 jquery 和 reCAPTCHA 验证输入表单
- 使用Google reCAPTCHA验证表单提交
- 在同一页面上验证多个recaptcha (V2)
- jQuery邮件验证和recaptcha在两阶段表单提交过程中不工作
- 用PHP和jQuery验证ReCaptcha
- 在javascript验证表单中实现reCaptcha
- ReCaptcha:如何在发送验证码时自动提交表单
- 我如何用javascript验证reCAPTCHA
- 谷歌'新的reCaptcha站点验证未返回任何响应
- 如何获得验证码客户端验证参数g-recaptcha-响应后,用户确认他不是一个机器人