首先我们需要认识到什么是reCAPTCHA

reCAPTCHA 验证”机制可以提供保护,避免发生由机器人导致的垃圾邮件或滥用。 通过此机制,将向用户显示一个Web 页面,其中包含Google reCAPTCHA API 提供的简单调整测试。 这些测试可以区分实际用户和机器人。 您可以将此机制添加到策略,以阻止机器人访问应用程序。

由于谷歌验证需要使用谷歌服务器,可能无法访问,需要使用另一个域名来实现客户端的访问。因为recaptcha是通过js导入的,是客户端层面的。

不过本人还是比较喜欢把js代码放在本地,这样能节省一些从远程web服务器下载js文件的时间。

中文版的js文件

/* PLEASE DO NOT COPY AND PASTE THIS CODE. */
(function() {var w = window,C = '___grecaptcha_cfg',cfg = w[C] = w[C] || {},N = 'grecaptcha';var gr = w[N] = w[N] || {};gr.ready = gr.ready ||function(f) { (cfg['fns'] = cfg['fns'] || []).push(f);};w['__recaptcha_api'] = 'https://recaptcha.net/recaptcha/api2/'; (cfg['render'] = cfg['render'] || []).push('onload');w['__google_recaptcha_client'] = true;var d = document,po = d.createElement('script');po.type = 'text/javascript';po.async = true;po.src = 'https://www.gstatic.com/recaptcha/releases/TDBxTlSsKAUm3tSIa0fwIqNu/recaptcha__zh_cn.js';po.crossOrigin = 'anonymous';po.integrity = 'sha384-+1xTZD1vXy4iYpvAgshm/J25tGGIOEBGzwJvtWiX6bJvTIuQBQI0VJIeRASsTPiz';var e = d.querySelector('script[nonce]'),n = e && (e['nonce'] || e.getAttribute('nonce'));if (n) {po.setAttribute('nonce', n);}var s = d.getElementsByTagName('script')[0];s.parentNode.insertBefore(po, s);
})();

英文版的js文件

/* PLEASE DO NOT COPY AND PASTE THIS CODE. */
(function() {var w = window,C = '___grecaptcha_cfg',cfg = w[C] = w[C] || {},N = 'grecaptcha';var gr = w[N] = w[N] || {};gr.ready = gr.ready ||function(f) { (cfg['fns'] = cfg['fns'] || []).push(f);};w['__recaptcha_api'] = 'https://recaptcha.net/recaptcha/api2/'; (cfg['render'] = cfg['render'] || []).push('onload');w['__google_recaptcha_client'] = true;var d = document,po = d.createElement('script');po.type = 'text/javascript';po.async = true;po.src = 'https://www.gstatic.com/recaptcha/releases/dPctOHA2ifhWm5WzFM_B5TjT/recaptcha__en.js';po.crossOrigin = 'anonymous';po.integrity = 'sha384-YOM1VjUkAnOtLKpWHvk6KSrYAoLEkaoPuep5VFiDATRna5swsN03dxDH51fiq3/H';var e = d.querySelector('script[nonce]'),n = e && (e['nonce'] || e.getAttribute('nonce'));if (n) {po.setAttribute('nonce', n);}var s = d.getElementsByTagName('script')[0];s.parentNode.insertBefore(po, s);
})();

在html页面通过script标签导入外部js文件后,就可以在form表单中插入如代码块。
我们需要在g-recaptcha中的data-sitekey中设置谷歌分配给我们的公钥,也就是我们需要发送到客户端的公钥。

<div class="g-recaptcha" data-sitekey="public_key"></div>

在php后端,我们需要对用户传入的g-recaptcha参数进行判断。

if (!empty($_POST['g-recaptcha-response'])){$g_v_response = $_POST['g-recaptcha-response'];$google_verify_result = json_decode(verify_code($google_verify_private_key,$g_v_response),true);if($google_verify_result['success'] == 1){#谷歌验证成功}else{#谷歌验证失败}
}

而这仅仅是针对谷歌验证的大致判断逻辑,对于verify_code的验证函数如下:

function verify_code($private_key,$user_key){$target_url = "https://recaptcha.net/recaptcha/api/siteverify";$post_data = array();$post_data['secret'] = $private_key;$post_data['response'] = $user_key;$response = send_post($target_url,$post_data);return $response;}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));$context = stream_context_create( $options );$result = file_get_contents( $url , false, $context );return $result ;}

在这里,private_key为谷歌验证平台为我们提供的私钥,而$user_key就是用户点击了谷歌验证之后,后台收到的g-recaptcha的参数。

并没有使用www.google.com因为在连接过程中可能有一些问题。
同时我们像目标url发送post请求的方法也如上。不过超时时间最好根据项目需要动态变更。

而如果对谷歌验证的接入文档有独立开发需要的,可以参考文档

https://www.ibm.com/docs/zh/sva/9.0.2?topic=authentication-configuring-recaptcha-verification-mechanism

关于WEB页面处谷歌验证的接入相关推荐

  1. 活动 Web 页面人机识别验证的探索与实践

    在电商行业,线上的营销活动特别多.在移动互联网时代,一般为了活动的快速上线和内容的即时更新,大部分的业务场景仍然通过 Web 页面来承载.但由于 Web 页面天生"环境透明",相较 ...

  2. java 开发web页面跳转,javaweb页面跳转

    java动态web页面,JavaWEB入门,javaweb页面跳转,javaweb页面登录 他们之间的联系是什么 8 serverlet 的生命周期及各阶段的作用 9 java web两种跳转方式分别 ...

  3. postfix+web页面+身份验证

    本篇笔者将介绍使用web方式实现对postfix邮件接收发送的管理,且需要经过身份验证 一:修改主机名: [root@lyt ~]# vim /etc/sysconfig/network [root@ ...

  4. RSA算法加密Web页面密码提交和验证实测

    理论可以参考百度:关于加密解密过程降解,觉得比较好的:一篇博文 因客户要求把web页面提交/验证改用RSA算法加密密文传递到后台: 1,js/jsp客户端部分RSA加密密码: 2,服务端Java解密: ...

  5. 大华相机接入web页面实现人脸识别

    先看下效果,中间主视频流就是大华相机(视频编码H.264),海康相机(视屏编码H.265) 前端接入视屏流代码 <!--视频流--><div id="col2"& ...

  6. 短信验证登录淘宝web页面(selenium+Chromedriver)

    短信验证登录淘宝web页面 自动化模拟登录(chromedriver存在python环境里) 第一步进行导包 第二步定位获取页面的web源代码 第三步构造是以chrome浏览器登录而不是以seleni ...

  7. 谷歌验证码recaptcha接入

    recaptcha是一项谷歌免费验证码服务,本次接入的是reCaptcha v2 1.首先选择reCaptcha的类型,注册申请api密钥对,包含站点密钥和密钥组成,站点密钥用于在网站调用reCAPT ...

  8. eNSP配置web防火墙登录华为防火墙Web页面

    目录 eNSP配置web防火墙登录华为防火墙Web页面 基本定义 防火墙功能 重要性 意义与特征 主要类型 关键技术 部署方式 具体应用 未来趋势 eNSP配置web防火墙登录华为防火墙Web页面 P ...

  9. laravel-admin加谷歌验证器

    示意图 添加谷歌验证首先需要 参考: Laravel-admin 登录添加图形验证码 构建一个自己的登录系统 安装扩展 composer require "earnp/laravel-goo ...

最新文章

  1. php rabbmq教程_RabbitMQ+PHP 教程一(Hello World)
  2. ktor框架用到了netty吗_教你如何构建异步服务器和客户端的 Kotlin 框架 Ktor
  3. python 和php的数据通信_python服务端 和 php客户端通信一
  4. VC++ CryptoAPI最基本编程
  5. js实现焦点进入文本框内关闭输入法:imeMode
  6. 解决svn图标不显示(绝对有用)
  7. OpenCV使用G-API实现面部美化算法
  8. 蓝字冲销是什么意思_60秒学个词:Elusive 是什么意思?(美音版)
  9. [react] 路由切换时同一组件无法重新渲染的有什么方法可以解决?
  10. linux 下后台运行python脚本
  11. docker mysql node_Docker打包nodejs项目和数据库
  12. Android蓝牙服务
  13. servlet处理多个请求 笔记
  14. Gmail推出视频聊天功能 间接否认欲收购Skype
  15. NLP先验知识(一)
  16. 2021年山东省安全员C证报名考试及山东省安全员C证操作证考试
  17. 领域自适应论文(六十八):Implicit Class-Conditioned Domain Alignment for Unsupervised Domain Adaptation论文原理
  18. 阿里arouter框架使用
  19. 2020年终总结!新的起航,新的征程
  20. winrar命令行打自解压安装包不生效问题

热门文章

  1. 电脑桌面云便签怎么绑定和开启微信提醒?
  2. wpf APlayer 播放
  3. 苹果浏览器无法边下边播MP4(谷歌浏览器可以)
  4. MediaPlayer实现音乐文件的边下边播
  5. 一秒快速修正 mysql ERROR 1406 (22001): Data too long for column ‘name‘ at row 1
  6. 阿里云数据库RDS如何监控、备份及克隆实例?
  7. linux挂载ntfs硬盘6,CentOS 6.2 挂载 NTFS格式的硬盘
  8. 推荐几个正经网站,让你的数据结构和算法学习事半功倍!
  9. Vulnhub靶机系列:SecTalks: BNE0x03 - Simple
  10. HTML一条线匀速一定区域运动,通用的匀速运动框架如何打造