reCAPTCHA v3 实现笔记

news/2025/2/28 2:48:20/

一、概述

reCAPTCHA v3 是一种用于区分用户和机器人行为的安全验证服务。它通过在后台评估用户行为并返回一个分数来判断用户是否为真实用户。本文将介绍如何在前端和后端实现 reCAPTCHA v3 的集成。

二、注册和密钥生成

  1. 注册 reCAPTCHA v3

    • 访问 Google reCAPTCHA 管理页面(需确保链接合法且网络正常)。
    • 如果链接无法访问,请检查链接的合法性或稍后重试。
    • 注册时需要填写网站信息,并选择 reCAPTCHA v3。
    • 注册完成后,Google 会生成一对密钥:
      • 前端密钥(Site Key):用于前端页面。
      • 后端密钥(Secret Key):用于后端验证。
  2. 密钥示例

    • 前端密钥:4LfczOEqAAAAAK9B4aegJ3McvFYjCra0GSEHSVI9(请替换为实际生成的密钥)
    • 后端密钥:4LfczOEqAAAAALFmTHfxHimHV35T8C0FuRXN26Un(请替换为实际生成的密钥)

三、前端实现

  1. 引入 reCAPTCHA 脚本
    在 HTML 文件中,添加以下脚本以加载 reCAPTCHA v3:

    <script src="https://www.google.com/recaptcha/api.js?render=Site_Key"></script>
    
  2. 执行 reCAPTCHA
    在页面加载完成后,调用 grecaptcha.execute 方法生成验证令牌:

    javascript">window.grecaptcha.ready(() => {window.grecaptcha.execute('Site_Key', { action: 'submit' }).then((token) => {console.log(token); // 获取到的验证令牌// 将令牌发送到后端进行验证request('backend_api_url', { recaptcha: token }).then((res) => console.log(res));});
    });
    
    • 注意
      • action 参数用于指定用户行为的类型(如 submit)。
      • 生成的 token 需要发送到后端进行验证。

四、后端实现

  1. 安装依赖
    确保安装了 axios

    npm install axios
    
  2. 验证 reCAPTCHA
    后端代码如下:

    import axios from "axios";interface RecaptchaRequest {secret?: string;response: string;remoteip?: string;
    }async function verifyRecaptcha(requestData: RecaptchaRequest): Promise<any> {requestData.secret = "Secret_Key"; // 替换为实际的后端密钥console.log("🚀 ~ verifyRecaptcha ~ requestData:", requestData);try {const url = "https://www.google.com/recaptcha/api/siteverify";const params = new URLSearchParams();params.append('secret', requestData.secret);params.append('response', requestData.response);if (requestData.remoteip) {params.append('remoteip', requestData.remoteip);}const response = await axios.post(url, params);return response.data;} catch (error) {console.error("Error verifying reCAPTCHA:", error);throw error;}
    }export default verifyRecaptcha;
    
  3. 返回结果示例
    验证成功后,Google 返回的结果如下:

    {"action": "submit","challenge_ts": "2025-02-25T07:25:55Z","hostname": "192.168.3.21","score": 0.9,"success": true
    }
    
    • success:验证是否成功。
    • score:用户行为的分数(0~1),值越高表示越可能是真实用户。
    • action:与前端传入的 action 参数一致。
    • hostname:请求来源的 IP 地址。

五、注意事项

  1. 密钥安全

    • 前端密钥可以公开,但后端密钥必须保密,切勿泄露。
    • 不要将密钥硬编码在代码中,建议使用环境变量管理密钥。
  2. 网络问题
    如果在访问 Google reCAPTCHA 管理页面 或其他相关链接时遇到问题,请检查网络连接或链接的合法性。

  3. 调试

    • 在开发过程中,建议使用 console.log 或日志工具记录调试信息。
    • 如果后端验证失败,请检查 token 是否正确传递,以及后端密钥是否正确。

六、补充

在前端和后端集成 reCAPTCHA v3,有效防止机器人攻击并保护网站安全。在你的配置管理页面,要把启动v3的网站域名填进去,不然不能生效,后端无法解析前端回传的信息。


http://www.ppmy.cn/news/1575394.html

相关文章

将夸克网盘的webdav挂载成本地磁盘驱动器时报错“405“

1 准备 alist挂载夸克网盘完毕。网页浏览器处可以访问夸克网盘里的文件。 2 故障现象 但是用RaiDrive或rclone等将之挂载成本地磁盘会报错"405"。 3 解法 alist的web管理页面上给“用户&#xff08;一般是admin&#xff09;->编辑->权限"里的webdav读…

uni-app集成sqlite

Sqlite SQLite 是一种轻量级的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;广泛应用于各种应用程序中&#xff0c;特别是那些需要嵌入式数据库解决方案的场景。它不需要单独的服务器进程或系统配置&#xff0c;所有数据都存储在一个单一的普通磁盘文件中&am…

MySQL无法连接到本地localhost的解决办法2024.11.8

问题描述&#xff1a;我的MySQL可以远程连接服务器&#xff0c;但无法连接自己的localhost。 错误提示&#xff1a; 2003 - Cant connet to MySQL server on localhost(10061 "Unknown error")查找问题原因&#xff1a; 1. 检查环境变量是否正确&#xff1a;发现没…

【Linux 操作系统】进程管理 - 冯诺依曼体系|进程|环境变量|进程地址空间

目录 一、冯诺依曼体系&#xff1a;计算机世界的"生命循环系统" 二、操作系统&#xff1a;管理软硬件的"超人" 三、进程&#xff1a;计算机中的"平行宇宙" 三、环境变量&#xff1a;进程的"生存环境" 四、进程地址空间&#xff1a…

DeepSeek+谷云科技智能体,快速构建企业知识问答

想必最近大家的朋友圈、短视频平台都被DeepSeek技术刷屏了&#xff0c;教大家如何本地部署DeepSeek搭建本地知识库的经验内容也是数不胜数。但当你的企业兴冲冲想本地化部署时&#xff0c;却发现过程并没有那么简单。 大多数企业在本地部署DeepSeek时会选择在linux环境下&…

23贪心算法

分发饼干 class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {int i0,j0;int count0;sort(s.begin(),s.end());sort(g.begin(),g.end());while(i<g.size()&&j<s.size()){if(g[i]<s[j]){i;j;count;}else…

瑞芯微RK安卓Android主板GPIO按键配置方法,触觉智能嵌入式开发

触觉智能分享&#xff0c;瑞芯微RK安卓Android主板GPIO按键配置方法&#xff0c;方便大家更好利用空闲IO&#xff01;由触觉智能Purple Pi OH鸿蒙开发板演示&#xff0c;搭载了瑞芯微RK3566四核处理器&#xff0c;树莓派卡片电脑设计&#xff0c;支持安卓Android、开源鸿蒙Open…

Brave 132 编译指南 Android 篇 - 引言 (一)

1. 引言 在当今数字时代&#xff0c;移动互联网已成为人们获取信息、沟通交流和进行日常活动的主要方式。浏览器作为移动互联网的入口&#xff0c;其重要性不言而喻。Brave 浏览器&#xff0c;以其卓越的隐私保护特性、高效的性能表现以及创新的用户激励机制&#xff0c;在全球…