如何在 PHP 网站中轻松实现 Google reCAPTCHA V3?
2024-03-01 06:04:43
如何在网站中轻松实现 Google ReCAPTCHA V3(PHP)
简介
Google ReCAPTCHA V3 是一款强大的工具,可帮助网站抵御垃圾邮件、滥用行为和机器人攻击。在本文中,我们将详细介绍如何将其无缝集成到您的 PHP 网站中。
先决条件
- PHP 网站
- Google reCAPTCHA V3 帐户
第 1 步:创建 reCAPTCHA 密钥
登录您的 Google reCAPTCHA V3 帐户并创建一个新站点。选择“reCAPTCHA V3”类型并为其命名。网站密钥和站点密钥将在您的仪表板中提供。
第 2 步:将站点密钥添加到您的网站
在<head>
部分中,添加以下代码:
<script src="https://www.google.com/recaptcha/api.js?render=RECAPTCHA_SITE_KEY"></script>
将RECAPTCHA_SITE_KEY
替换为您从仪表板中获得的站点密钥。
第 3 步:在您的表单中集成 recaptcha v3
在您的表单 <form>
标签内,添加以下代码:
<input type="hidden" name="token" id="token">
这将创建一个隐藏字段来存储 reCAPTCHA 令牌。
第 4 步:初始化 reCAPTCHA v3
在您的 JavaScript 代码中,添加以下代码:
grecaptcha.ready(function() {
grecaptcha.execute('RECAPTCHA_SITE_KEY', {action: 'homepage'}).then(function(token) {
document.getElementById("token").value = token;
});
// Refresh token every minute to prevent expiration
setInterval(function(){
grecaptcha.execute('RECAPTCHA_SITE_KEY', {action: 'homepage'}).then(function(token) {
document.getElementById("token").value = token;
});
}, 60000);
});
将RECAPTCHA_SITE_KEY
替换为您从仪表板中获得的站点密钥。这将初始化 reCAPTCHA v3 并生成令牌,该令牌将存储在隐藏字段中。
第 5 步:验证令牌
当表单提交时,通过向您的服务器发送请求来验证 reCAPTCHA 令牌。在 PHP 中,可以使用以下代码:
$url = "https://www.google.com/recaptcha/api/siteverify";
$data = [
'secret' => "RECAPTCHA_SECRET_KEY",
'response' => $_POST['token'],
'remoteip' => $_SERVER['REMOTE_ADDR']
];
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data)
)
);
// Create and return stream context with options supplied in options preset
$context = stream_context_create($options);
// file_get_contents() is the preferred way to read the contents of a file into a string
$response = file_get_contents($url, false, $context);
// Take a JSON encoded string and convert it into a PHP variable
$res = json_decode($response, true);
将RECAPTCHA_SECRET_KEY
替换为您从仪表板中获得的密钥。
第 6 步:处理响应
验证 reCAPTCHA 令牌后,根据响应采取相应措施。如果您收到了有效的令牌,请继续执行您的表单操作。如果令牌无效或过期,请向用户显示错误消息。
常见问题
1. reCAPTCHA 令牌为何会过期?
reCAPTCHA V3 令牌的有效期为 10 分钟。如果您设置了较高的分数阈值,则可能需要更频繁地刷新令牌以避免它过期。
2. 为什么我得到“安全令牌已过期或你是机器人”错误消息?
这表明 reCAPTCHA 令牌无效或过期。检查您是否正确生成了令牌并将其发送到了验证端点。
3. 如何设置 reCAPTCHA 分数阈值?
分数阈值用于确定允许访问您网站的最低 reCAPTCHA 分数。阈值较低会让更多用户访问您的网站,但安全性也较低。阈值较高会提高安全性,但也可能阻止一些合法的用户。
4. reCAPTCHA V3 是否可以防止所有垃圾邮件和机器人攻击?
虽然 reCAPTCHA V3 非常有效,但它并不能保证完全防止所有垃圾邮件和机器人攻击。最好将其与其他安全措施结合使用,例如访问控制列表和 CAPTCHA。
5. reCAPTCHA V3 是否收集用户数据?
reCAPTCHA V3 确实收集一些用户数据,例如 IP 地址和浏览器信息。但是,这些数据用于检测机器人活动,并且不存储或出售给第三方。