php - 如何在服务器请求方法中验证 recaptcha 响应测试?
问题描述
我有下面的代码,一旦发送表单,我想检查它是否用户通过了recaptcha 测试。我该怎么做?搜索了很多东西,我找不到适合我的方法..
<html>
<head>
<script type="text/javascript">
var verifyCallback = function(response) {
alert(response);
};
var onloadCallback = function() {
grecaptcha.render('example3', {
'sitekey' : '6LdlRIgaAAAAAJXOu3EsuGVnKVjmSaWfSbuwSHLI',
'callback' : verifyCallback,
'theme' : 'dark'
});
};
</script>
</head>
<body>
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
// here I want to verify if the use user passed the recaptcha
{
some code
}
}
?>
<form method="POST">
<div id="example3"></div>
<br>
<input type="submit" value="Submit">
</form>
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit"
async defer>
</script>
</body>
</html>
解决方案
您应该查找reCAPTCHA 的服务器端验证文档: https ://developers.google.com/recaptcha/docs/verify
如文档中所述,您必须通过 PHP CURL 发送 API 请求:
URL: https://www.google.com/recaptcha/api/siteverify METHOD: POST
所以是这样的:
function validate_captcha($secret, $response, $remoteip) {
$captcha_url = "https://www.google.com/recaptcha/api/siteverify";
$captcha_url .= "?secret=".$secret;
$captcha_url .= "&response=".$response;
$captcha_url .= "&remoteip=".$remoteip;
$ch = curl_init($captcha_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);
$response=json_decode($data,true);
if ($response["success"]) {
return true;
}
else {
return false;
}
}
你这样调用函数:
$captcha_is_ok = validate_captcha(
"......mySecret.....",
$_POST['g-recaptcha-response'],
$_SERVER['REMOTE_ADDR']);
if ($captcha_is_ok) {
... do something cool ...
} else {
... don't do something cool ...
}
推荐阅读
- python - Python中的二进制检查器
- python - QT Designer:在尊重窗口重新缩放 PyQT5 的同时移动和调整小部件的大小
- python - random.choice 总是返回 false
- java - Selenium 中的 WebDriverManager
- javascript - 想创建一个google chrome扩展来高亮文本,当我们使用chrome查看本地html文件的时候
- javascript - Channel_not_found:authed_user 无法通过 Slack API 向频道发布消息
- java - 使用 Eclipse 警告的 PMD 规则集
- google-sheets - 让用户覆盖由 Google 表单生成的预填电子表格复选框
- swift - CoreData Int32 标量问题
- mysql - 带有条件的 MYSQL GROUP BY 2 字段