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都安裝成功了啊,現在一直都在使用,效果都正常。你具體遇到了什麼問題?