📜  如何在 php 中添加 recaptcha 验证(1)

📅  最后修改于: 2023-12-03 15:38:22.821000             🧑  作者: Mango

如何在 PHP 中添加 reCAPTCHA 验证

reCAPTCHA 是谷歌提供的一种人机验证技术,可以帮助网站防止机器人自动化攻击和滥用。此外,添加 reCAPTCHA 可以增强网站的安全性和减少垃圾信息的提交。本文将介绍如何在 PHP 中添加 reCAPTCHA 验证。

步骤

下面是在 PHP 中添加 reCAPTCHA 验证的步骤。

  1. 注册 reCAPTCHA

首先,需要在 reCAPTCHA 网站上注册,获取站点密钥和私钥。注册网址为:https://www.google.com/recaptcha/admin。

  1. 在 HTML 表单中添加 reCAPTCHA 元素

在表单中添加 reCAPTCHA 元素,用户需要通过验证 reCAPTCHA 才能提交表单。

<form action="submit.php" method="post">
  <!-- 其他表单元素 -->
  <div class="g-recaptcha" data-sitekey="your_site_key"></div>
  <input type="submit" value="提交">
</form>

其中 data-sitekey 属性为你在 reCAPTCHA 网站上获取的站点密钥。

  1. 在后台验证 reCAPTCHA

在表单提交到后台时,需要验证 reCAPTCHA 是否通过。如果通过,才可以继续处理表单数据。

<?php
  $captcha_response = $_POST['g-recaptcha-response'];
  $secret_key       = 'your_secret_key';
  $url              = 'https://www.google.com/recaptcha/api/siteverify';

  $data = array(
    'secret'   => $secret_key,
    'response' => $captcha_response
  );

  $options = array(
    'http' => array (
      'method' => 'POST',
      'content' => http_build_query($data)
    )
  );

  $context  = stream_context_create($options);
  $response = file_get_contents($url, false, $context);
  $result   = json_decode($response);

  if ($result->success) {
    // reCAPTCHA 验证通过
    // 处理表单数据
  } else {
    // reCAPTCHA 验证失败
    // 返回错误信息
  }
?>

在后台验证 reCAPTCHA 的具体步骤如下:

  • 获取 g-recaptcha-response
  • 根据你在 reCAPTCHA 网站上获取的私钥、g-recaptcha-response,构建验证请求。
  • 使用 file_get_contents 函数,将构建的请求发送到 reCAPTCHA 网站进行验证。
  • 获取 reCAPTCHA 的响应,并使用 json_decode 函数将其转换为 PHP 对象或数组。
  • 判断 reCAPTCHA 是否验证通过。
  1. 添加 reCAPTCHA 兼容性

如果用户的浏览器不支持 JavaScript,或者因为其他原因无法加载 reCAPTCHA 脚本,需要提供备选方案。可以在表单中添加一个隐藏域,用于存储 reCAPTCHA 的验证结果。

<noscript>
  <div>
    <input type="hidden" name="recaptcha_response" value="manual_challenge">
  </div>
</noscript>

在后台验证时,需要检查 g-recaptcha-responserecaptcha_response 是否都为空。如果都为空,返回错误信息。

总结

通过以上步骤,可以在 PHP 中添加 reCAPTCHA 验证,提高网站安全性和减少垃圾信息的提交。需要注意的是,reCAPTCHA 仅提供人机验证,无法保证绝对的安全性。如果需要更高级别的安全保障,请考虑其他身份验证技术。