Google 大割又出手了,這次是針對一些網站常用的 reCAPTCHA 機器人驗證服務,有在使用的免費仔應該都有收到通知,進到 reCAPTCHA Admin Console 應該也會看到訊息:

這塊訊息在前陣子就有了,但這次是寄信來通知,
2024/4/1 免費版會變成 reCAPTCHA Lite,然後免費版的驗證次數限縮,
每個月驗證次數會超過 10000 次的,
想要使用更多驗證新功能的,
都建議升級到 reCAPTCHA Standard 或 reCAPTCHA Enterprise。

其餘那些驗證次數用量超級低,也不是常常要新增網站的,應該繼續爽爽用,不用管。

本文稍微探討一下網站開發者可能要採取的行動,
升級到 reCAPTCHA Enterprise,之前已經串好的網站程式要修改嗎? 舊的轉移進去不用改,但是以後新增的要。
還有 reCAPTCHA Enterprise 的新功能,跟新版串接方式的 breaking change…

信件如下:

Dear XXX,
Starting April 1, 2024, we will be expanding existing features and providing additional pricing options for Google reCAPTCHA product tiers.

What do you need to know?
Starting April 1, 2024, the following price changes will be available with Google reCAPTCHA:

– Inclusion of transaction protection in reCAPTCHA Enterprise and a price reduction from $40 to $1 per 1,000 assessments. reCAPTCHA Enterprise will also include 10,000 no-cost assessments per month instead of 1 million.
– Addition of reCAPTCHA Standard for bot protection at $8/month for up to 100,000 assessments per month.
– Renaming of the reCAPTCHA no-cost product to reCAPTCHA Lite, providing protection for up to 10,000 instead of 1 million assessments per month.

We will continue to provide 1 million no-cost reCAPTCHA Enterprise assessments per month to eligible Nonprofits, Charities, and Libraries.

What do you need to do?
Please complete the following actions based on your Google reCAPTCHA product tier:

Existing reCAPTCHA Enterprise customers on a subscription contract:
Nothing changes until your next renewal date. If your renewal date is after April 1, 2024, you will have the option to renew into the new reCAPTCHA Enterprise product.

Existing reCAPTCHA Enterprise customers on a pay-as-you-go model:
You will be automatically upgraded to the new reCAPTCHA Enterprise product after April 1, 2024.

Please monitor your usage and make sure your new monthly bill is as expected at the end of April 2024.

reCAPTCHA Classic (Non-Enterprise) customers:
No action is required from you.
You can upgrade to reCAPTCHA Standard or reCAPTCHA Enterprise to use the additional features.

Eligible Nonprofits:
Sign up for a Google for Nonprofits account to activate your non-profit subscription.

Your affected projects are below:
(列一堆 GCP 專案)
Thank you for choosing Google reCAPTCHA.

先檢查 reCAPTCHA 驗證次數加起來有沒有超過 10000 次

本來的 reCAPTCHA Enterprise 定價如下,每項功能每月 1 至 1,000,000 次呼叫免費。

100 萬大關是之前就有的,之前用量很大的,可能老早都已經升級上去了。
而在新的郵件中,縮減成只剩 10,000 次免費…
不過對於非營利機構、慈善機構、圖書館、公益基金會、社會協會,郵件中有附上一個連結,可以申請前 100 萬次免費版 Google 非營利版帳戶

其他還在用免費版的,可以到 reCAPTCHA admin console 檢查有沒有用量很大,即將超過的。

另外100 萬次是整個帳戶一起算,不是只算單一網站域名或單一 reCAPTCHA tag。
依照Comparison of features between reCAPTCHA versions文件上的定義:

The free one million assessments are per organization. The limit aggregates use across all accounts and all sites.

所以那種程式開發外包公司,用一兩組帳號幫很多客戶開很多組 reCAPTCHA 金鑰的,應該很容易被影響到。

reCAPTCHA Enterprise 有多出什麼功能

升級成 reCAPTCHA Enterprise 當然不是只有負責收錢而已,還多了一堆新功能,可以參考 Comparison of features between reCAPTCHA versions,表格中最右邊是原本免費版的,左邊下面功能一大串的是 reCAPTCHA Enterprise。

本來只有用到 siteverify 功能,打勾驗證或隱形驗證,判斷使用者是不是機器人,
現在又多了新功能,列舉幾個:

  • 9 種動作名稱 action names,例如登入、註冊、重設密碼、結帳之類的,系統將對使用者操作的動作類型,提高監控不同形式攻擊的能力,抓出試圖偽造或重複操作的攻擊者。
  • 可以檢查使用者用的密碼是否有在外洩資料庫 Detect password leaks and breached credentials
  • 可以檢查交易詐欺的 Fraud Prevention,網站程式可以把使用者輸入的 card_bin(信用卡號前6碼信用卡銀行識別號碼)和 card_last_four(信用卡號末4碼) 等資訊,傳給 Google 做驗證。
  • 可以像是提供 MFA,幫忙發送驗證碼郵件給使用者 Configure Multi-factor authentication (要另外申請才能使用,如下圖)。

幫升級 reCAPTCHA Enterprise 找理由

雖然郵件通知只是說 2024/4/1 免費版會變成 reCAPTCHA Lite,然後免費版的驗證次數限縮,建議升級到 reCAPTCHA Standard 或 reCAPTCHA Enterprise。

沒說舊版的 API,那些 JS 路徑和後端驗證 URL 哪一天會 sunset,
沒說舊的 reCAPTCHA admin console 什麼時候會停用,
目前就算升級到 reCAPTCHA Enterprise,之前舊的 reCAPTCHA admin console 也還是可以新增金鑰。

但是依照 Google 關閉部惡名昭彰的紀錄,
真怕 2024/4/1 之後,有新的網站要放人機驗證器,卻只能強制使用新的 API?
或是 2024/4/1 之後,沒升級的莫名其妙人機驗證跑不出來、驗證失敗?
舊的 reCAPTCHA admin console 人間蒸發,每個專案的允許域名、管理員 email,設定通通遺失?
有各種可能導致使用者無法正常登入/註冊/送出表單
大家都知道免費的最貴的道理,有機會應該還是要更新升級一下…

最理想的升級轉移情況是:
– 網站本來就已經有 Google Sign-In 或其他功能,之前已經開好 GCP 專案。
– GCP 專案還是客戶自己的,而且平常有在正常使用,並且不會亂點釣魚郵件。
– GCP 專案有好好的綁上 billing plan,而且平常有在正常使用,不會連信用卡過期或帳戶被鎖都不知道。
– 工程師也有很自由的操作權限,碰到問題不用通靈,開個設定不用先在自己的帳號上截圖、然後打幾百通電話請別人照著操作。

那可以很輕鬆愉快把 reCAPTCHA Enterprise 搬進去。
不是這種理想情況的,可能又要經歷一陣兵荒馬亂、會動就好、粉飾太平的旅程…

reCAPTCHA 轉移到 GCP 後會發生什麼事

開發者可能臉都綠了,就算新功能沒用到,只有用到最基本的 siteverify,這樣網站程式是不是又要大改?

Google 現階段在舊版 reCAPTCHA admin console 有提供快速升級的功能,會直接建立一個全新的 GCP 專案,然後開好已啟用的 API,把舊的金鑰自動搬進去。

成功 ! 您已順利升級,不要對網站進行任何變更,不過如果要使用 MFA 和密碼外洩偵測功能,須更新網頁中的指令碼和呼叫,以及後端呼叫。現在起,可以在 GoogIe Cloud 中管裡網站及查看深入分析結果

按照Migrate from reCAPTCHA (non-Enterprise version)文件與操作時的對話視窗的訊息,只要依照步驟完成升級,之前的 reCaptcha 金鑰和 REST API endpoint 還是可以正常使用。金鑰不用重新產生,串接的 URL 也不用改,

開了 reCAPTCHA Enterprise 專案,會看到以前免費版的都被歸在傳統版金鑰,以後新開的的會被歸在 Enterprise keys (如下圖)。

傳統版金鑰還是可以跑出 badge 或 checkbox,照常會在一些無痕模式、VPN 模式跑出驗證 9 宮格圖,不會直接 PASS,程式看起來好像暫時都運作正常。

新增或升級成 reCAPTCHA Enterprise 金鑰

如果不想要讓轉移工具自動產生一個新的 GCP 專案,然後付款資訊跟管理員權限又要設定老半天,
也可以自己手動在現有的 GCP 專案建立金鑰。

現有 GCP 專案如果要使用 reCAPTCHA Enterprise,記得到「已啟用的 API 和服務」把 reCAPTCHA Enterprise API 啟用。
如果執意要從 GCP 的左邊選單進去,reCAPTCHA Enterprise 是放在「安全性」裡面(如下圖)。

在這個 reCAPTCHA Enterprise 的新後台,看起來可以很輕鬆的建立新的 reCAPTCHA Enterprise 金鑰,中間還會提供 REST API 回傳與接收的資料格式,和一些主流語言的基本範例程式碼。

雖然各語言的範例程式碼幾乎都是要先引用安裝一大包 Google 相關的 SDK,
但是比起 V2&V3 時代那個超陽春的文件 Verifying the user’s response,只有說要 POST 到哪去,然後給個回傳 json 範例,reCAPTCHA Enterprise 算是挺有誠意。

傳統版金鑰如果也想使用 reCAPTCHA Enterprise 的一堆新功能,可以直接點升級…

但是如果 GCP 專案沒綁 billing plan(輸入信用卡和帳單地址資訊),會發生錯誤(如上圖)。

另外 reCAPTCHA Enterprise 的 API 也是充滿 breaking change,
js 從 https://www.google.com/recaptcha/api.js 變成 https://www.google.com/recaptcha/enterprise.js
本來的 SITE _SECRET 沒了,變成要帶入 GCP 的專案 ID,驗證呼叫路徑變成 https://recaptchaenterprise.googleapis.com/v1/projects/PROJECT_ID/assessments?key=API_KEY
可憐的帕魯可以參閱這個對照表 Use reCAPTCHA Enterprise features after migration 裡面概述有哪些路徑跟 js function 名稱要更換。

所以一些系統後台,如果有設計成可以讓管理員填寫 Google reCAPTCHA SITE _SECRETSITE_KEY 的,後台 UI 與程式也要跟著調整了…

另外補一個傳統版金鑰沒有,但是新增/升級成 Enterprise keys 才有的功能,
在 reCAPTCHA Enterprise 的指標後台中,可以看到系統會依據歷史資料,建議把驗證分數設成多少:

延伸閱讀:

Google reCAPTCHA 難度設定的雜談

有些科技 3C 媒體把這個新政策宣傳成「以後不用再找紅綠燈/斑馬線/樓梯/煙囪」了,聽起來不知道是在尻洗經營網站的人都付不起這筆錢,還是直接預期大家會跳船,改用別的驗證服務?

關於那個難度設定,reCAPTCHA Enterprise 的使用核取方塊驗證方式,跟舊版 V2 一樣分成三種等級:

有人說這是現在人太軟弱,以前的 reCAPTCHA 要認門牌、認古籍,更加地獄難度:

有人說這是 UX 問題,圖片常常很難辨認,尤其是在搶票的時候跳出這個,一直連續選失敗,容易讓使用者感到非常火大。有時候使用者沒有完成轉換,中間任何一道阻礙使用者的關卡都會被抓出來鞭。
但其實這有時候又是一個開發團隊與管理層的政治問題。

V2/核取方塊驗證容易在勾選「我不是機器人」之後,如果 Google 判定這操作者風險過高,會再跑出一個九宮格,甚至十六宮格的圖,要選對才能讓 Google 放行。
但其實 Google reCaptcha 還有提供V3/隱形驗證,只是又有其他缺點:
1.可能會被長官當成網站沒做安全防護機制,反之,放個大大的「我不是機器人」讓使用者選,才會被當成有在做事。
2.有時候使用者一個頁面連續重整,或是逛了很多頁,有機會碰到一進頁面就會直接跳九宮格圖,背後還會有個半透明黑畫面擋住,跟其他載入頁面的廣告訊息視窗打架。
3.會在網頁角落跑出一個 badge (如下圖),常常會跟頁面上其他 UI 物件打架,像是回到頂部、線上客服、聯絡我們、社群網站連結的各種按鈕…

而且那塊東西還不能隱藏,要藏的話也只能用 visibility: hidden; ,不能用 display:none,否則無法正常驗證是否為機器人。

4.驗證機制差異
V2到後端的時候,網站程式呼叫驗證,Google 回傳的資料沒有分數,主要只有 success true 或 false 而已,可能只是檢查那組 token 有沒有過期? 一開始使用者打勾時的動作+選圖片,就直接定生死了。

V3/隱形驗證到後端的時候,網站程式會收到一個 Google 給的風險分數(score,1.0 是最高分,越接近 0.0 就越有可能是機器人),
網站開發者可以在程式中設定分數低於多少,就讓使用者操作失敗。
但現實是使用者不知道為什麼自己分數很低,網站開發者也不知道為什麼使用者這麼低分?
那個風險分數是 Google 給的
更有可能會變成使用者不管怎麼重試,Google 給的分數都非常低分,使用者被網站的程式判斷規則擋住,從而完全無法正常使用網站。
當驗證失敗的消費者,在聊天視窗或電話中狗幹客服的時候,客服哪知道這是誰的問題? 鐵鎚釘釘子,釘子釘木板,當然接下來換開發人員被釘。

所以兩者比較之下,要靠 AI 玄學打分數,還是靠 AI 判斷勾選時的動作+選九宮格圖片,來決定決定使用者是不是機器人? 大家說呢?

其他 Captcha 人機驗證的替代服務

要用 Google reCAPTCHA 只有一個理由:免費。
要繼續用 Google reCAPTCHA 只有一個理由:轉移過去什麼都不用動,還是能繼續用。

而不要用 Google reCAPTCHA,則有千百個理由,
如有下列情況,可以考慮直接更換成其他家的人機驗證服務:
– Google reCAPTCHA 新版的串接方式有重大變更,調整程式很麻煩。
– 新功能用不到,每做一個新網站時,開金鑰很麻煩。
– 免費用量額度變少,怕哪一天不小心超量被收錢。
– 真的產生花費,GCP 對台灣公司沒有開打統編的發票,要找 GCP 代理商。
– 基層帕魯不想拿自己的信用卡綁在公司專案上做測試。
– 基層帕魯跟公司申請信用卡有各種困難。
– 基層帕魯權限不足,設定 GCP 專案那些東西很麻煩。
– 公司是 AWS 派(後面有介紹 AWS 的),使用 GCP 跟 Azure 會讓公司風水不順。
– Google reCAPTCHA 有在 2captcha 驗證碼破解服務的名單上,要找一個名單上沒有的,才比較安心。

反正換一家驗證碼,只要是改程式跟測試的成本,對使用者來說可能沒什麼感覺,不像會員資料轉移、LINE/Google/FB Login 轉移那麼麻煩。
人力成本很便宜的話,大不了以後別家驗證碼要收費或是終止服務時,再搬一次嘛。

以下介紹一些常見的人機驗證服務:

名稱費用
hCaptcha每個月 100 萬次呼叫免費
Cloudflare Turnstile免費,付費版有更多功能
AWS WAF 的 CAPTCHA付費
Friendly Captcha付費,非商用可免費用,每個月有 1,000 驗證次數
mCaptcha需自行架設
Proton 的 CAPTCHA付費
Arkose付費
MTCaptcha免費版僅能用於單一域名

hCaptcha

hCaptcha Intuition Machines, Inc. 公司的服務之一,這是一間研究 AI/ML 的公司,不是美股 LUNR 那個上太空的 Intuitive Machines, Inc.

題目有時候更有”創意”,像下面放一個驗證難度調到最大的,可以勾選我是人類,試玩一下…

功能最少的 Basic 免費版本 一樣是提供每個月 100 萬次呼叫 (Free up to one million requests per month)。

Cloudflare Turnstile

Cloudflare Turnstile 文件

又是那個超佛的 Cloudflare,免費版與企業付費版主要是功能差異,目前暫時沒有說免費版有什麼驗證次數限制,有都市傳說 超過 100 萬次呼叫,API 會直接回傳驗證成功,但這個說法沒有被客服證實,也沒有在官方文件上明文註記。


Cloudflare Turnstile 比較方案

這服務是在 2022/9 出的,剛出來時打著 Google reCAPTCHA 可以無痛轉換,把一些程式函式和伺服器回傳的 json 資料,名稱和格式取得跟 Google reCAPTCHA 一模一樣。
但當時實際用了之後發現沒這麼簡單:

1.這要開一組 Cloudflare 帳號才能使用
如果 Cloudflare 帳號登入要 2FA,然後有權限的人出門在外,當初說要用的 Cloudflare 的帕魯,又要準備被當沙包。
又或是例如日後維護網站的帕魯,發現網站上有放一組 Cloudflare Turnstile 的人機驗證方塊,今天因故要多加一組子域名上去,請同事或對方窗口找一下手上的 Cloudflare 帳號,進去設定一下? 可能一個上午或一天又過去了,有些長官覺得不就加個網域進去,怎麼設定了一天還沒好? 辦事效率不佳? 帕魯又要準備被當沙包。

2.一個無痛轉換各自表述,實際上要換的可多了:
– 前端 JS 路徑要換,網站有設 Content-Security-Policy 的也要改規則。
– 後端呼叫驗證的 URL 要換。
– 有些架構比較大的程式可能把 key 和 secret 字串統一放在另一個設定配置檔案,設定配置裡的也要換。
– 有些比較安全的程式,會把設定配置檔案裡面的參數字串再加密,無論是在本機操作還是使用公有雲的相關功能,步驟又更多了。
– 頁面上一些 js 函式名稱也都要換,例如網頁有一個 AJAX 表單,當驗證失敗或某些情況後要刷新人機驗證區塊,會用到 grecaptcha.reset() ,而在 Cloudflare Turnstile,這個函式叫做 turnstile.reset()
– 也許有人程式碼中把人機驗證相關的變數名稱直接取 grecaptcha 什麼的,如果放著不動,後人會看到一堆叫 grecaptcha 的東西,卻是呼叫 Cloudflare @##$$@#$…
– 有這種防禦意識的,通常會員登入、忘記密碼、註冊、聯絡表單、訂閱、後台登入等多處都會加,程式可能真的寫了 N 次,或是做成什麼共用元件,各種做法又各有各的雷。
– 如果有在做自動化測試的,要讓測試工具 bypass 驗證碼,Cloudflare Turnstile 是有幾組固定的 Dummy sitekeys and secret keys,而 Google reCaptcha V2 也是有一組測試用金鑰 6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI,而 Google reCaptcha V3 官方則是建議為測試環境另開一組金鑰,或是程式直接略過分數檢查。

3.Cloudflare Turnstile 有提供 compat=recaptcha 的模式,但是只支援 Google reCAPTCHA V2。

另外 Cloudflare Turnstile 設定域名的 UI 有點有趣:

輸入域名的地方是一個下拉選項的選單,可能會讓人以為要先把域名託管在 Cloudflare (name server 指向到 Cloudflare),才能使用 ?
但其實不用,只要把域名手動 key 上去,盡量不要用複製貼上的,然後選擇 custom domain,還是可以成功加進去。

這種奇妙介面,跟 LINE API 的 Callback URL 輸入欄位,看似只是一條 input,但是可以換行變成 textarea 輸入多條網址,有異曲同工之妙。

目前在一些什麼社群影片下載網站、漫畫網站也常常看到使用 Cloudflare Turnstile 來做人機驗證(有的是設定 WAF 然後進頁面時自動驗證),連這些網站都大膽放心用了,應該是可以考慮的。

AWS WAF 中的 CAPTCHA 功能

Using the CAPTCHA JavaScript API

如果有人的公司不方便開 GCP 專案,但是有 AWS 的? 那 AWS 剛好也有這人機驗證的服務。
在 AWS 的 WAF&Shield 中,進入 Application integration,裡面可以申請 CAPTCHA 的金鑰。

因為光是驗證問題是否答對,就要依照驗證次數收費,(一萬次 USD 4.00),所以就不放上來給大家玩,放擷圖就好,題目也算是滿有”創意”的。

AWS 的驗證碼好處是還整合了語音驗證碼功能、做 WCAG 無障礙的網頁非常方便,一套解決。

但缺點是驗證介面 UI 預設會依據瀏覽器語系,雖然支持 10 幾種語言,但他的中文介面只有做簡體中文… (AWS WAF Captcha adds support for ten additional languages)。
之前有一家台灣的線上服務(翻到是 HackMD)用 AWS WAF,有一天被打了之後,進首頁就跑出那個簡體中文字的防護驗證畫面,結果被人以為他們用了什麼中國服務。

Friendly Captcha

Friendly Captcha

其他的人機驗證服務,在首頁多半都是強調防止機器人、解決詐欺和濫用問題之類的,只有這家把隱私性和 GDPR 合規放在前面。

這家是要付費的,月費是€9 (大概 300 台幣出頭) 可以設定一組域名,每個月有 1,000 驗證次數。
如果是非商業使用則有免費方案,同樣可以設定一組域名,每個月有 1,000 驗證次數。

mCaptcha

mCaptcha

使用工作量證明(PoW)的驗證機制,驗證程式碼號稱與 reCAPTCHA 和 hCaptcha 相容。

沒有月費或是每個月驗證次數限制,因為這是一個自由專案,需要自行將整套驗證碼服務佈署在自己主機上。

Proton 的 CAPTCHA

Introducing Proton CAPTCHA

Proton 是一個提供隱私郵件的服務,在註冊時會看到他們自家的驗證碼服務,與 mCaptcha 同樣使用 PoW 機制。

有中文介面,也有拼圖、光束棒等各種不同創意形式的驗證圖片,也有針對無障礙的設計。

網頁上沒有看到費用價目表,需要透過該篇文章底下的 email 與他們聯絡。

Arkose Labs(FunCaptcha)

Arkose Labs

這是一家阻止機器人和自動攻擊的公司,圖形驗證只是它的服務之一,官網上自稱有史以最強大的驗證碼(In fact, it is the strongest CAPTCHA ever made.),一些 Adobe、Twitter(X)、EA、微軟等大公司都採用他家的服務。

在官方網頁上還有專門一頁 Looking for a reCAPTCHA alternative?,有各種比較表格、使用報告,讓大家知道 Arkose 的服務比 reCAPTCHA v3 和 reCAPTCHA Enterprise 更強,使用之後馬上減少了多少機器人的圖表。

這家的驗證圖形非常有創意,不只是打個數字或打勾就好,到 Google 搜尋 “twitter captcha” 就能找到一堆令人髮指的人機辨識遊戲,例如其中一種是給一張房間的俯瞰圖,然後要從 10 幾張其他角度的房間圖片中,選到正確的圖片。

沒有免費版,要試用的話需要聯絡業務。

MTCaptcha

MTCaptcha

這家主打的特點都很具體,不會像有些服務用「先進」「即時風險評估」「透明的風險洞察」「強大的攻擊反應」之類,講得很虛無飄渺。
MTCaptcha 有 10 幾種視覺樣式和自訂 CSS、有多國語言(選香港中文會變成繁體), GDPR 合規、無障礙、中國大陸地區可用…等特點。
還有一個比 Google reCaptcha 更簡單好懂的數據後台,如果有人說「常常有某國的使用者被擋住耶?」,管理員可以輕鬆叫出國家、驗證失敗率、驗證失敗類型的報表來對質。

免費版只能綁定單一域名,付費版則是每個月 85 美元起跳。