使用Google reCAPTCHA防止机器注册

news/2024/6/20 0:01:19

本文作者:陈进坚
博客地址:https://jian1098.github.io
CSDN博客:https://blog.csdn.net/c_jian
简书:https://www.jianshu.com/u/8ba9ac5706b6
联系方式:jian1098@qq.com

环境要求

  • 能翻墙的电脑
  • 域名

验证原理

在谷歌recaptcha申请验证密钥,配置好服务器的域名,在需要验证的表单中嵌入google reCAPTCHA ,提交表单的时候将验证成功生成的响应码传给后台,后台将响应码post到谷歌的服务器验证地址,谷歌服务器将返回验证结果。生成响应码的页面域名必须是在谷歌页面配置的域名才能生成,只有ip也不行。google reCAPTCHA在web端有3种形式的验证

1.reCAPTCHA v3

在网页加载的时候生成响应码,不需要用户进行任何操作。生成响应码的时候会稍有延迟,比网页加载完成会慢一点,确保了他人利用程序获取html代码的方式不会获取响应码。加入reCAPTCHA v3 的页面会有类似下面的图标

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.reCAPTCHA v2 Checkbox 点击复选框

用户点击复选框进行验证成功后生成响应码,图标如下

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.reCAPTCHA v2 Invisible 自定义按钮

开发人员自定义验证的动作,验证成功后调用生成响应码的js代码生成响应码即可。图标与第1种相同。

申请密钥

打开网页 https://www.google.com/recaptcha/admin 登录谷歌账号,在Label下面的输入项目名,然后选择reCAPTCHA的类型,点击Register即可注册完成,完成后可以得到Site key和Secret key。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

配置域名

在上一步注册好之后的页面底下Domains的框中输入需要验证的域名,只有输入的域名网站才有资格生成你的响应码。

插入前端代码

在申请密钥完成的页面中按照给出的步骤Step1加入前端代码,比如如果是v3类型的验证码:

在html头部引入js

<script src='https://www.google.com/recaptcha/api.js?render=你的Site key'></script>

由于国家防火墙的原因,大陆的网站需要将js替换为国内的js地址(js是在客户端浏览器执行的,服务器能翻墙也不行)

https://www.recaptcha.net/recaptcha/api.js

生成响应码

<script>
grecaptcha.ready(function() {grecaptcha.execute('你的Site key', {action: 'action_name'}).then(function(token) {// 将这个生成的token传给后台});});
</script>

后台验证

将前端传过来的响应码和你的Secret key发送到谷歌验证地址进行验证,判断返回数据即可

大陆的需要将验证链接 https://www.google.com/recaptcha/api/siteverify 改为 https://www.recaptcha.net/recaptcha/api/siteverify

php示例:

<?php
function send_post($url, $post_data)
{$postdata = http_build_query($post_data);$options = array('http' => array('method' => 'POST','header' => 'Content-type:application/x-www-form-urlencoded','content' => $postdata,'timeout' => 15 * 60 // 超时时间(单位:s)));$context = stream_context_create($options);$result = file_get_contents($url, false, $context);return $result;
}$post_data = array(        'secret' => '你的Secret key',        'response' => $_POST["g-recaptcha-response"]    //前端传过来的响应码
);$recaptcha_json_result = send_post('https://www.google.com/recaptcha/api/siteverify', $post_data); 
$recaptcha_result = json_decode($recaptcha_json_result);   
//在这里处理返回的值 
var_dump($recaptcha_result);    
?>

隐藏reCAPTCHA图标

根据reCAPTCHA的服务条款(即你必须同意),您必须告知游客有关网站上的验证码实现

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

但是有时候在手机页面这么大的一个图标确实会影响到页面效果,不得不隐藏的时候可以在前端做一下处理

  • 设置data-badge属性inline

    <button type="submit" data-sitekey="your_site_key" data-callback="onSubmit" data-badge="inline" /> 
    
  • 添加CSS

    .grecaptcha-badge { display: none; 
    } 
    

https://dhexx.cn/news/show-5318056.html

相关文章

xhci 数据结构

xhci 数据结构 xhci 数据结构主要在手册上有详细的定义&#xff0c;本文根据手册进行归纳总结&#xff1a; 重点关注的包括&#xff1a; device contexttrb ringtrb device context设备上下文 设备上下文数据结构由xHC管理&#xff0c;用于向系统软件报告设备配置和状态信息。…

URL的绝对路径/相对路

一、URL 浏览器要想发起请求,必须是一个完整的url地址. URL是一个固定格式的字符串 它表达了&#xff1a; 从网络中 哪台计算机&#xff08;domain&#xff09; 中的 哪个程序&#xff08;port&#xff09; 寻找 哪个服务&#xff08;path&#xff09;&#xff0c;并注明了…

Python(九十四)变量的作用域

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

CTFHUB-技能树-Web前置技能-文件上传(前端验证—文件头检查)

CTFHUB-技能树-Web前置技能-文件上传&#xff08;前端验证—文件头检查&#xff09; 文章目录 CTFHUB-技能树-Web前置技能-文件上传&#xff08;前端验证—文件头检查&#xff09;前端验证—文件头检查题目解析 各种文件头标志 前端验证—文件头检查 题目考的是&#xff1a;pn…

面试题:JVM内存泄露服务器会有什么表现?怎么处理?

来源 阿里-技术-1面 我的回答 刚开始内存泄露少的时候&#xff0c;没什么影响&#xff0c;到后面&#xff0c;会频繁的进行Full GC。面试官&#xff1a;那CPU的表现是怎样的呢&#xff1f; 我&#xff1a;CPU使用率会很高&#xff0c;因为现在的垃圾回收器一般是使用的并行回…

[Win11·Copilot] Win11 系统更新重启后任务栏 Copilot 图标突然消失 | 解决方案

文章目录 前言Copilot介绍产生异常的原因解决方案总结 前言 在 Windows 11 的最新系统更新之后&#xff0c;一些用户报告了任务栏中 Copilot 图标消失的问题。这篇技术博文将为您提供详细的解决方案&#xff0c;帮助您恢复 Copilot 图标&#xff0c;并确保您能够继续享受 Copi…

解决宝塔的FTP无法使用被动模式

问题&#xff1a;宝塔安装完ftp管理软件之后&#xff0c;无法使用被动模式连接 解决&#xff1a; 提示&#xff1a; 如果还是不行&#xff0c;那么要看看防火墙和安全组有没有放行被动模式的端口&#xff0c;宝塔安装的pure-ftpd软件的被动模式端口默认是39000至400…

linux进阶篇:重定向和管道操作

Linux中的重定向和管道操作 llinux中的三种IO设备&#xff1a; 标准输入&#xff08;STDIN&#xff09;,文件描述符号为&#xff1a;0&#xff0c;默认从键盘获取输入 标准输出&#xff08;STDOUT&#xff09;,文件描述符号位&#xff1a;1&#xff0c;默认输出到显示终端 标准…

vim相关指令

vim的各种模式及其转换关系图 vim 默认处于命令模式&#xff01;&#xff01;&#xff01; 模式之间转换的指令 除【命令模式】之外&#xff0c;其它模式要切换到【命令模式】&#xff0c;只需要无脑 ESC 即可&#xff01;&#xff01;&#xff01; [ 命令模式 ] 切换至 [ 插…

【python从入门到精通】-- 第五战:函数大总结

&#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;python从入门到精通&#xff0c;魔法指针&#xff0c;进阶C&#xff0c;C语言&#xff0c;C语言题集&#xff0c;C语言实现游戏&#x1f448; 希望得到您的订阅和支持~ &#x1f4a1; 坚持创作博文…