谷歌人机验证Google reCAPTCHA

reCAPTCHA是Google公司推出的一项验证服务,使用十分方便快捷,在国外许多网站上均有使用。它与许多其他的人机验证方式不同,它极少需要用户进行各种识图验证。

它的使用方式如下如所示,只需勾选复选框即可通过人机验证。

虽然简单但效果很好,因为Google会收集一些浏览器信息,网络信息,鼠标轨迹等信息,最后通过神经网络判断是否为机器人。而且reCAPTCHA还可以记录并分析使用该人机验证的请求次数,并对可以的请求进行统计和监管。

一些准备工作:
需要一个谷歌账号没有的先去注册一个

reCAPTCHA官网:https://developers.google.com/recaptcha/ (需要科学上网)

使用reCAPTCHA需要创建密匙对,创建密匙:https://www.google.com/recaptcha/admin

首先先创建密匙
进入 https://www.google.com/recaptcha/admin

 

创建成功后会产生一对密匙

前端部署
在你需要添加reCAPTCHA的界面添加script标签

<script src="https://www.recaptcha.net/recaptcha/api.js"></script>


然后再你需要显示reCAPTCHA验证框的地方添加

<div class="g-recaptcha" data-sitekey="你的网站密匙"></div>


可以设置验证框的主题默认主题为light,可以添加属性:data-theme="dark" 变为暗色主题

 生成token代码

token = grecaptcha.getResponse();

后端部署
在每次验证完成后会生成一个g-recaptcha-response验证码,需要将这个验证码和你的密匙一起发送至:https://www.recaptcha.net/recaptcha/api/siteverify (使用GET方式传参)

传参的格式:secret=xxxxxx&response=xxxxxxx

PHP示例代码:

$data['secret'] = '你的密钥';
$data['response'] = $request['token'];    //前台生成的token
$googleVerify = RequestHttpUtility::postUrl('https://www.google.com/recaptcha/api/siteverify',$data,["Content-type:application/x-www-form-urlencoded"]);
// V3返回的成功结果集
// array:5 [
//   "success" => true
//   "challenge_ts" => "2023-04-12T09:18:22Z"
//   "hostname" => "face-mall.com"
//   "score" => 0.9
//   "action" => "submit"
// ]

下图为需要传递的参数及其含义

secret (必须)    你的secret密匙(第二个密匙)
response (必须)    客户端获取到的 g-recaptcha-response验证码
remoteip (可选)    客户端的ip
接口返回的数据是json格式

{
  "success": true|false,
  "challenge_ts": timestamp,  // timestamp of the challenge load (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)
  "hostname": string,         // the hostname of the site where the reCAPTCHA was solved
  "error-codes": [...]        // optional
}

 验证通过后success返回的值为“true”,如果验证失败则会返回error-code,下面为error-code及其对应原因

Error code    Description
missing-input-secret    The secret parameter is missing.
invalid-input-secret    The secret parameter is invalid or malformed.
missing-input-response    The response parameter is missing.
invalid-input-response    The response parameter is invalid or malformed.
bad-request    The request is invalid or malformed.
timeout-or-duplicate    The response is no longer valid

请求统计
访问:https://www.google.com/recaptcha/admin 可以查看请求的统计 

 

以上是V2版本示例,V3版本后台一样,只是返回的数据不太一样,V3的多了个得分,V3前台显示没有勾选框,通过得分来判断是否为机器人

### Google reCAPTCHA 验证原理 Google reCAPTCHA 是一种用于区分人类用户和自动化程序的技术,其核心目标是防止机器人滥用网站资源。reCAPTCHA 的工作基于机器学习算法以及多种行为分析手段,能够动态调整验证难度以适应不同的风险场景[^1]。 具体来说,reCAPTCHA 使用以下几种机制来判断访问者是否为真实的人类: - **交互数据收集**:当用户与网页上的 reCAPTCHA 组件互动时,系统会记录用户的鼠标移动轨迹、点击位置以及其他行为特征作为输入数据。 - **历史活动评估**:如果该 IP 地址或者浏览器之前有过良好的使用记录,则可能减少额外验证步骤;反之亦然。 - **挑战响应测试**:对于高风险请求,可能会触发更复杂的验证码形式比如图片选择题让用户完成证明自己不是机器人。 这些信息会被发送到服务器端进行综合分析处理最终得出结论——即当前尝试登录的是真人还是潜在威胁源。 ### 实现方式 要将 reCAPTCHA 功能集成至自己的应用当中可以按照如下方式进行操作: #### 前置准备 首先需要前往 [Google reCAPTCHA 官网](https://www.google.com/recaptcha/) 注册账号并获取站点密钥(Site Key) 和 私有密钥(Private Key)[^2]。 #### HTML页面嵌入代码示例 下面展示了一个简单的HTML表单例子,在其中加入了v3版本的reCAPTCHA控件: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>reCAPTCHA Example</title> <!-- 加载API脚本 --> <script src="https://www.recaptcha.net/recaptcha/api.js"></script> </head> <body> <form action="?" method="POST"> <button type="submit">Submit</button> <!-- 将site key放置于此处 --> <div class="g-recaptcha" data-sitekey="your_site_key_here"></div> </form> </body> </html> ``` 注意这里我们采用了`recaptcha.net`替代传统的`google.com`路径以便于国内环境下的正常使用效果。 #### 后台校验逻辑概览(Python版) 一旦前端成功提交带有token的数据包到达后台之后就需要利用先前获得的秘密钥匙来进行合法性确认了。以下是采用Python语言编写的一个简易示范片段: ```python import requests def verify_recaptcha(response, secret_key): url = 'https://www.recaptcha.net/recaptcha/api/siteverify' payload = {'response': response, 'secret': secret_key} r = requests.post(url, data=payload) result = r.json() return result['success'] # 调用函数传参检验结果... is_valid = verify_recaptcha('user_response_token', 'private_secret_key') if is_valid: print("Verification passed.") else: print("Invalid CAPTCHA entered.") ``` 上述过程展示了整个流程从客户端渲染到最后服务端审核完毕的整体架构设计思路。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值