Drupal网站的反垃圾一直是个问题,包括页面留言、登录、注册、网站联络等,如果不使用任何反垃圾措施,很快就会被垃圾发送者的信息淹没。🤬
前几年记录过一篇文章《Drupal反垃圾模块的选择》,以前安装过captcha、botcha、honeypot、Mollom、BlockAnonymousLinks等,不过spammer也在不断提高技术,普通的算术或者图片验证码已经不能对付厉害的垃圾发送者了,如果继续加大图片复杂程度的话,对想留言的普通用户很不友好。
前几天有朋友留言让我试一试Google Recaptcha,这个Google出品的验证方式我自己在一些Google产品上有过体验,既然是Google推出的,技术上应该是顶级的,但我记得需要翻墙的时候才会看到验证提示,如果在国内使用就看不到而无法使用。
感谢留言的朋友也告诉我可以有替换的网址,只要简单替换一下就可以,于是我这两天先在我的博客上尝试了安装Google reCAPTCHA,需要到Google recaptcha网站上注册账号、添加域名,我访问一看,居然几年前我就添加过几个域名,后来都已经遗忘了,于是重新添加域名,reCAPTCHA 类型还是选择的v2,获得reCAPTCHA密钥,包括40位长度的公钥和私钥,填写到Drupal google recaptcha的配置中。
在网上搜了一下,recaptcha.net可以作为www.google.com相关服务的反向代理域名,于是在google recaptcha模块中修改了google_recaptcha.under_hood.inc这个文件里面的两个地方:
//jamesqi 2019-7-4//$url = 'https://www.google.com/recaptcha/api.js?onload=google_recaptcha_onload&render=explicit'; $url = 'https://recaptcha.net/recaptcha/api.js?onload=google_recaptcha_onload&render=explicit'; //jamesqi 2019-7-4//$ch = curl_init('https://www.google.com/recaptcha/api/siteverify'); $ch = curl_init('https://recaptcha.net/recaptcha/api/siteverify');
2019年7月8日补充:用drush来批量设置recaptcha支持的办法:
drush en -y recaptcha drush vset captcha_default_challenge "recaptcha/reCAPTCHA" drush vset recaptcha_verify_hostname 1 drush vset recaptcha_use_globally 1 drush vset recaptcha_type "image" drush vset recaptcha_theme "light" drush vset recaptcha_tabindex "0" drush vset recaptcha_size "" drush vset recaptcha_site_key "6LeI......klHb" drush vset recaptcha_secret_key "6LeI......1c9U" drush vset recaptcha_noscript 1
对应的设置效果如下:
2019年7月12日补充:发现国内服务器上安装的recaptcha模块虽然可以正常显示验证码并且通过“进行人机身份验证”,但提交表单的时候还是报错“您所输入的验证码答案不正确。”,而安装在国外的服务器上没有这个问题。仔细排查后找到需要改的地方:
sites/all/modules/recaptcha/src/ReCaptcha/RequestMethod/Drupal7Post.php 这个文件的下面部分:
... public function submit(RequestParameters $params) { $options = array( 'headers' => array( 'Content-type' => 'application/x-www-form-urlencoded', ), 'method' => 'POST', 'data' => $params->toQueryString(), 'context' => stream_context_create(array('ssl' => array('verify_peer' => FALSE, 'verify_peer_name' => FALSE),)), ); //jamesqi 2019-7-12//$response = drupal_http_request(ReCaptcha::SITE_VERIFY_URL, $options); $response = drupal_http_request('https://recaptcha.net/recaptcha/api/siteverify', $options); if ($response->code == 200 && isset($response->data)) { // The service request was successful. return $response->data; } ...
这样就OK了。
2019年7月19日国内Drupal 8网站下安装recaptcha,需要修改/www/adsensebook.cn/modules/recaptcha/recaptcha-php/src/ReCaptcha/ReCaptcha.php:
/** * URL for reCAPTCHA sitevrerify API * @const string */ //const SITE_VERIFY_URL = 'https://www.google.com/recaptcha/api/siteverify'; const SITE_VERIFY_URL = 'https://recaptcha.net/recaptcha/api/siteverify';//jamesqi 2019-7-18
2021年4月12日补充:适合Google Recaptcha v3的Drupal插件也有了,Drupal 7和Drupal 8都支持。
2022年8月18日补充:最近把一些网站中使用的v2升级到v3了,新记录了一篇《Drupal中使用Google Recaptcha V3屏蔽垃圾》。
评论5
Google出品 必属精品
Google出品 必属精品确实很不错
确实很不错,我安装了recaptcha插件的几个网站这几天基本上看不到垃圾留言和通过反馈表单发来的垃圾邮件了。✌
在google recaptcha管理面板可以看到屏蔽了很多。👍
非常实用,谢谢博主分享
非常实用,谢谢博主分享我按照您的操作方法试了,不行呀 我的是drupal 7
我按照您的操作方法试了,不行呀 我的是drupal 7我自己Drupal 7和Drupal 8都安装成功了啊
我自己Drupal 7和Drupal 8都安装成功了啊,现在一直都在使用,效果都正常。你具体遇到了什么问题?