reCAPTCHA是一项免费的非机器人活动验证服务,由google提供
选择使用去现成的开源组件实现人机身份验证服务
在github搜索 php分类 + reCAPTCHA
能找到了不少合适的资源
下面介绍使用https://github.com/anhskohbo/no-captcha
在国内实现reCAPTCHA人机验证
以下操作基于laravel5.5下
- 使用
composer require anhskohbo/no-captcha
给项目载入相关依赖包 - 使用样子前往 https://www.google.com/recaptcha/admin 注册
SECRET
和SITEKEY
- 修改no-captcha源码使用代理服务器提供的js和验证接口
- 在模块中使用
- 在控制器中进行验证
修改源码以便支持国内访问
打开 \vendor\anhskohbo\no-captcha\src\NoCaptcha.php
在模板中使用
{!! NoCaptcha::renderJs() !!}
{!! NoCaptcha::display() !!}
在控制器进行验证
$this->validate($request, [
'article_id'=> 'required|numeric',
'email'=> 'required|email',
'g-recaptcha-response' => 'required|captcha'
],[
'g-recaptcha-response.required' => '请进行人机身份验证',
'g-recaptcha-response.captcha' => '人机身份验证失败',
]);
在国内想要使用这项服务,需要使用代理服务器(下面代理服务器网上找到的,不清楚安全性和稳定性)
1,将https://www.google.com/recaptcha/api.js
替换为
https://recaptcha.net/recaptcha/api.js
2,将https://www.google.com/recaptcha/api/siteverify
替换为
https://recaptcha.net/recaptcha/api/siteverify
在国内想要使用这项服务,需要使用代理服务器(下面代理服务器网上找到的,不清楚安全性和稳定性)https://recaptcha.net/recaptcha/api.js
替代https://www.google.com/recaptcha/api.js
https://recaptcha.net/recaptcha/api/siteverify
替代https://www.google.com/recaptcha/api/siteverify
总结
reCAPTCHA是一个安全、易于添加的免费人机身份验证服务,如果要在国内使用的话,需要使用代理服务器。 reCAPTCHA与传统的图片验证相比,具有更高和安全性;传统的图片验证码,在某些ORC服务商号称99%验证码识别准确率,想要拦截机器人,就像自行车只锁轮子来防盗一样。 在国内有geetest可提供相似人机验证服务,但是轮子比较旧了(laravel组件太久没有更新),百度geetest发现破解风气太重,暂时先不下手了。