关于WEB页面处谷歌验证的接入
首先我们需要认识到什么是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页面处谷歌验证的接入相关推荐
- 活动 Web 页面人机识别验证的探索与实践
在电商行业,线上的营销活动特别多.在移动互联网时代,一般为了活动的快速上线和内容的即时更新,大部分的业务场景仍然通过 Web 页面来承载.但由于 Web 页面天生"环境透明",相较 ...
- java 开发web页面跳转,javaweb页面跳转
java动态web页面,JavaWEB入门,javaweb页面跳转,javaweb页面登录 他们之间的联系是什么 8 serverlet 的生命周期及各阶段的作用 9 java web两种跳转方式分别 ...
- postfix+web页面+身份验证
本篇笔者将介绍使用web方式实现对postfix邮件接收发送的管理,且需要经过身份验证 一:修改主机名: [root@lyt ~]# vim /etc/sysconfig/network [root@ ...
- RSA算法加密Web页面密码提交和验证实测
理论可以参考百度:关于加密解密过程降解,觉得比较好的:一篇博文 因客户要求把web页面提交/验证改用RSA算法加密密文传递到后台: 1,js/jsp客户端部分RSA加密密码: 2,服务端Java解密: ...
- 大华相机接入web页面实现人脸识别
先看下效果,中间主视频流就是大华相机(视频编码H.264),海康相机(视屏编码H.265) 前端接入视屏流代码 <!--视频流--><div id="col2"& ...
- 短信验证登录淘宝web页面(selenium+Chromedriver)
短信验证登录淘宝web页面 自动化模拟登录(chromedriver存在python环境里) 第一步进行导包 第二步定位获取页面的web源代码 第三步构造是以chrome浏览器登录而不是以seleni ...
- 谷歌验证码recaptcha接入
recaptcha是一项谷歌免费验证码服务,本次接入的是reCaptcha v2 1.首先选择reCaptcha的类型,注册申请api密钥对,包含站点密钥和密钥组成,站点密钥用于在网站调用reCAPT ...
- eNSP配置web防火墙登录华为防火墙Web页面
目录 eNSP配置web防火墙登录华为防火墙Web页面 基本定义 防火墙功能 重要性 意义与特征 主要类型 关键技术 部署方式 具体应用 未来趋势 eNSP配置web防火墙登录华为防火墙Web页面 P ...
- laravel-admin加谷歌验证器
示意图 添加谷歌验证首先需要 参考: Laravel-admin 登录添加图形验证码 构建一个自己的登录系统 安装扩展 composer require "earnp/laravel-goo ...
最新文章
- php rabbmq教程_RabbitMQ+PHP 教程一(Hello World)
- ktor框架用到了netty吗_教你如何构建异步服务器和客户端的 Kotlin 框架 Ktor
- python 和php的数据通信_python服务端 和 php客户端通信一
- VC++ CryptoAPI最基本编程
- js实现焦点进入文本框内关闭输入法:imeMode
- 解决svn图标不显示(绝对有用)
- OpenCV使用G-API实现面部美化算法
- 蓝字冲销是什么意思_60秒学个词:Elusive 是什么意思?(美音版)
- [react] 路由切换时同一组件无法重新渲染的有什么方法可以解决?
- linux 下后台运行python脚本
- docker mysql node_Docker打包nodejs项目和数据库
- Android蓝牙服务
- servlet处理多个请求 笔记
- Gmail推出视频聊天功能 间接否认欲收购Skype
- NLP先验知识(一)
- 2021年山东省安全员C证报名考试及山东省安全员C证操作证考试
- 领域自适应论文(六十八):Implicit Class-Conditioned Domain Alignment for Unsupervised Domain Adaptation论文原理
- 阿里arouter框架使用
- 2020年终总结!新的起航,新的征程
- winrar命令行打自解压安装包不生效问题
热门文章
- 电脑桌面云便签怎么绑定和开启微信提醒?
- wpf APlayer 播放
- 苹果浏览器无法边下边播MP4(谷歌浏览器可以)
- MediaPlayer实现音乐文件的边下边播
- 一秒快速修正 mysql ERROR 1406 (22001): Data too long for column ‘name‘ at row 1
- 阿里云数据库RDS如何监控、备份及克隆实例?
- linux挂载ntfs硬盘6,CentOS 6.2 挂载 NTFS格式的硬盘
- 推荐几个正经网站,让你的数据结构和算法学习事半功倍!
- Vulnhub靶机系列:SecTalks: BNE0x03 - Simple
- HTML一条线匀速一定区域运动,通用的匀速运动框架如何打造