reCAPTCHA 的用法

紅寶鐵軌客
Join to follow...
Follow/Unfollow Writer: 紅寶鐵軌客
By following, you’ll receive notifications when this author publishes new articles.
Don't wait! Sign up to follow this writer.
WriterShelf is a privacy-oriented writing platform. Unleash the power of your voice. It's free!
Sign up. Join WriterShelf now! Already a member. Login to WriterShelf.
寫程式中、折磨中、享受中 ......
1.52K   0  
·
2019/08/16
·
7 mins read


網站上線一段時間後,當你的使用者越來越多時,這時就會有無聊的「駭客」開始對你的網站做奇怪的攻擊,我不喜憨叫他們「駭客」,因為這個名稱已經被「美化」了,好像是個驕傲,其實,他們就是爛咖,就是令人討厭的夭壽鬼,所以我就叫他們是夭壽鬼,夭壽鬼有好幾種,有一種就是會來亂註冊或是亂填表的夭壽鬼,他們很討厭,這篇文章就是來談如何防止:

自動注冊機器人(Spambots)/   訂閱炸彈(Subscription bombing) /  假註冊(Fake Signups)

看來受害者還不少,網路上有很多的討論,大家基本上用的不外乎就是以下的幾個方法來擋:

  • Captcha驗證碼,這是用的最廣,透過人工智慧或是拼圖來識別機器人,也是我們這篇文章要來介紹的。
  • Throttling:流量管控,這我已經談過,我有另一篇文章有寫到怎麼樣用計算攻擊的速度與次數來設限夭壽鬼,有興趣可以《看這篇》
  • Honeypot Fields:蜜罐陷阱欄位,這很有趣,也很簡單,就是弄個不會被「真人」看到的假欄位,讓自動注冊機器人填,只要發現這個欄位有被填,那就一定是機器人填的,毫不猶豫的把他擋住,不過這個方法我不是很喜歡,這會影響很多帳號管理系統的運作,我就不在這介紹了,如果有興趣,上網 google:Honeypot,就可以發現很多有用的資料。

Captcha 有很多種,最多人用的應該就是 Google 的 ReCAPTCHA 了,又免費,所以,這篇文章就直接來看看 Google 的 ReCAPTCHA 要怎麼用。

 

ReCAPTCHA 有三種

ReCAPTCHA(官網) 是 Google 的免費服務,基本上就是用各種方法來辨別來訪的是不是機器人,ReCAPTCHA 可以分成三種類型:

  1. ReCAPTCHA v2 核取方塊 (v2 with Checkbox) 
  2. ReCAPTCHA v2 隱形(v2 invisible) 
  3. ReCAPTCHA v3

我不曉得各位偉大的讀者覺得如何,當我讀完 Google 的三個選項介紹時,完全沒有方向,而且啊,越看越迷糊,當然,一定是我太笨了,真的看沒有懂,花了好多時間,再加上實作,終於,慢慢的看懂了,以下就是我這笨蛋的心得紀錄,如果您光看 Google 文件就很清楚了,那就「免」看下去了啦,對我,我太健忘,這篇會很棒的幫我留住記憶。

 

ReCAPTCHA 的 v2 與 v3 最大不同

v2 跟 v3 最大的不同就是:v2 是使用 google 內建的「挑戰(challenge)」的,v3 沒有「挑戰」,等等,什麼是「挑戰」?就是以下這些圖啦,基本上就是用一些寫的怪怪的英文,或是圖像內容,來辨識來訪者是不是「人類」:

Google ReCaptcha v2 挑戰
以前的版本,現在不用了

所以,重點來了,如果你或是業主,不能接受用 google 內建的「挑戰(challenge)」來辨識使用者的話,那就只能用 v3 了,確實,很多網站使用者對無窮無盡的辨識各國路標很反感,特別是使用 vpn 連線的使用者,那真的會搞很久,火冒三丈,結果就是,使用者走了、流失。

那 v2 跟 v3 使用情境大概是各在那裡呢?以下是我的建議,個人意見啦。

 

何時用 ReCAPTCHA v2 有核取方塊 checkbox ?

這應該是最常看到的,或者是說,最常能被看到的,使用這種方式的網頁,都可以看到網頁裡有以下這個大按鈕:

使用情境:

  1. 使用者一定要先點選這核取 checkbox, 如果被認為可能不是人,就會跳出「挑戰」
  2. 確認過關後,再 Submit 這網頁,

所以,這對使用者來說,要按兩次,可能是個負擔。

使用在那裡:如果你的使用者可以接受這樣兩階段操作,業主也對使用 google 內建的「挑戰」來辨識沒意見,那就用這版,最簡單。

 

要用 ReCAPTCHA v2 invisible 還是 ReCAPTCHA v3? 

這兩種外觀都很像,都不用先按 v2 checkbox 那個大按鈕,唯一在網頁上會出現的就是下圖的 ReCAPTCHA Logo,還躲在右下角角:

使用情境:

  1. 使用者第一時間接觸,完全無感,就跟沒有裝 ReCAPTCHA  一樣,
  2. 按下 Submit,
    1. v2 invisible:  在送出網頁資料前,前台要先執行 ReCAPTCHA 的 JavaScript,讓 ReCAPTCHA 先判斷是不是夭壽鬼,如果被認為可能是機器人,就會再跳出 google 內建的「挑戰」來辨識,一直到確認是真人成功,才可以送出網頁資料,
    2. v3: ReCAPTCHA 會通知 Server 使用者是不是「機器人」的機率,接下來就隨你玩了,

所以,這對使用者來說,最好的清況,完全無感,很棒。 

使用在那裡:如果你的使用者,或業主,一定要使用者正常使用時,完全感覺不到 CAPTCHA,那就是這兩種二選一了,能接受 google 內建的「挑戰」,就用 v2 invisible,不能,就只能用 v3 了。

 

Rails 使用 ReCAPTCHA

在 Rails 上使用 ReCAPTCHA 很簡單,有一個很棒的 recaptcha gem,套上就好了,如下:

ambethia/recaptcha — ReCaptcha helpers for ruby apps. Contribute to ambethia/recaptcha development by creating an account on GitHub.
GitHub

怎麼用?網路上已經有很多篇很棒的文章,我就不再多寫了,以下是幾篇我覺得寫得超棒的:

其實,這個 gem 的說明寫得很棒,我覺得一定要細看,特別是 v2 invisiblb 因為用到 javascript。

 

其他記事:

v3 + v2?

我看到很多人介紹 v3 用法時,都是當 v3 回應可能是機器人時,又跳回到用 v2 checkbox 來驗證,這很奇怪,如果要這樣用,那為什麼不直接用 v2 invisible 就好?我覺得可能是 recaptcha gem 的介紹就是如此寫,大家就繼續這樣介紹了,這樣用當然也可以,但是我覺得這就不是 v3 的原意了,v3 就是把驗證機器人的事交給網站了,用 v3 的理由應該讓 v3 做機器海關,如果沒問題就放過,如果 v3 認為有問題,後台就接手,看是要用 sms 或是 email 再做第二階段認證,還是調低使用者優先,或是,乾脆擋住它,這點文件上其實有不錯的建議。

localhost 要加上

網站開發時,要記得在 ReCAPTCHA admin 上的網域上加上 localhost,不然開發時會連不上 ReCAPTCHA,這以前不用,google 後來才移除 localhost 的。

v3 是給誰用,score 要設多少?

Power User! 基本上就是給要自己管控討厭鬼的人,v3 的 score 是個謎,所以,你不能靠 v3 來確定來者是不是機器人,v3 只能大概確認,所以,v3 是個差不多先生,不可靠,你要一路依你的網站流量來微調 score,但是,這個差不多先生有很大的用處,最重要的精神就是:你自己決定開不開門,這在 v2 是做不到的。

ReCAPTCHA 的 key 要設在那裡?

實務上,一個網站可能會混用好幾個 ReCAPTCHA 版本,這時,我建議是放在 secrets.yml 裡,呼叫時,就這樣讀取,很簡單:

#view:
  <%= recaptcha_tags(site_key: Rails.application.secrets.v2_cb_site) %>
#controller:
  verify_recaptcha(secret_key: Rails.application.secrets.v2_cb_secret, model: @user) && ....

 


WriterShelf™ is a unique multiple pen name blogging and forum platform. Protect relationships and your privacy. Take your writing in new directions. ** Join WriterShelf**
WriterShelf™ is an open writing platform. The views, information and opinions in this article are those of the author.




Share this article:
About the Author

很久以前就是個「寫程式的」,其實,什麼程式都不熟⋯⋯
就,這會一點點,那會一點點⋯⋯




Join the discussion now!
Don't wait! Sign up to join the discussion.
WriterShelf is a privacy-oriented writing platform. Unleash the power of your voice. It's free!
Sign up. Join WriterShelf now! Already a member. Login to WriterShelf.