跳到主要內容區塊

計資中心電子報C&INC E-paper

技術論壇

Google reCAPTCHA v2與v3之使用- 以PHP及C# ASP.NET為例
  • 卷期:v0048
  • 出版日期:2019-03-20

作者:唐瑤瑤 / 臺灣大學計算機及資訊網路中心程式設計師


CAPTCHA主要用途在網頁註冊、登入、訂閱或論壇發佈等功能時,系統隨機產生文字圖樣的驗證碼,但人類視覺可以清楚辨識,以期達到攔截機器人惡意行為的目的。本文介紹Google reCAPTCHA的使用,並提供實作範例。

 

需求

今天要來談的應用是:全自動區分電腦和人類的公開圖靈測試(Completely Automated Public Turing test to tell Computers and Humans Apart,簡稱CAPTCHA),俗稱驗證碼,是一種區分用戶是電腦或人的公共全自動程式。以上說明來自維基百科。


CAPTCHA主要用途在網頁註冊、登入、訂閱或論壇發佈等功能時,系統隨機產生文字圖樣的驗證碼,程式難以判讀,但人類視覺可以清楚辨識,以期達到攔截機器人惡意行為的目的。下圖為網路郵局的登入畫面:

 

 

但在2013年Vicarious公司宣布他們可破解文字版的CAPTCHA圖像驗證,並於2017年正式在《科學》(Science)期刊上發表了研究細節。也就是說CAPTCHA文字圖像驗證已無法有效區別電腦還是人類(意思是可以拿掉了),而該論文的結論是我們應該要尋求更強大的機制來防範機器人造訪者。下圖為已被電腦視覺解析之範例。

 

 

導入Google reCAPTCHA

為了保護網站免受機器人惡意濫用,我們使用Google reCAPTCHA來測試。「reCAPTCHA使用先進的風險分析引擎和自適應CAPTCHA來防止自動化軟件在網站上進行濫用活動,且可以讓有效用戶輕鬆通過。此外,每當Google的CAPTCHA被解決時,人類的努力有助於數字化文本,註釋圖像和建構機器學習數據集。這反過來有助於人類保存書籍,改進地圖和解決難以解決的AI問題。」以上說明由Google提供。有趣的是,普羅大眾又成了Google大神的免費勞工。往正向思考的話,則是創造價值,因為高質量的人類標記圖像被編譯成可用於訓練機器學習系統的數據集,為下一代AI奠基。

 

我們在需要驗證的網頁中插入checkbox「□我不是機器人」,大部分的人類使用者都能一鍵(one click on the checkbox)過關,如下圖。

 

 

少部分的情況,使用者則必須正確辨識如下圖形方能驗證成功。對於視障人士則提供語音辨識。

 

  

  

 

實作步驟1–登入google帳號並註冊reCAPTCHA Site
reCAPTCHA v2註冊網址:https://www.google.com/recaptcha/,如下圖Domains欄位可以填寫多個網域,加入localhost是為了本機測試。

 

 

按下Register button後,Google將會產生專屬的Site key及Secrete key,我們只需在網頁程式客戶端及伺服器端各加入一小段程式碼即可。其中Site key是放在網頁客戶端HTML程式碼,而Secrete key則是我們的伺服器端程式拿來與Google溝通驗證使用。

 

實作步驟2-客戶端程式碼
我們先以PHP作範例,程式碼如下:
DIV Class=g-recaptcha之data-sitekey記得換成你自己的key。

 

 

實作步驟3-伺服器端程式碼
同樣的Secrete key請記得更換,上述為PHP版本。如果在測試過程發現久等不到回應,可能是防火牆ACL的設定需要新增google IPs,請參考https://code.google.com/archive/p/recaptcha/wikis/FirewallsAndRecaptcha.wiki

 

下面是C# .NET伺服器端程式:

 

 

實作步驟4
程式上線超過7天後,可以回到reCAPTCHA admin頁面查看分析及統計數據。

 


 

實作步驟5

目前Google已經release reCAPTCHA v3 beta版,註冊網址如下:https://www.google.com/recaptcha/admin#v3signup。v3版本以減少使用者的不便為前提,並提供開發者更多的彈性。Google回應給伺服器的會是介於0~1的數字,score越接近0.0表示為機器人的可能性最高。因此開發者若接收到回應為0.5時,便可依據該頁面所需的安全等級,而決定是否要再進一步提供使用者驗證要求。

 

客戶端程式範例如下,可以發現完全不需要使用者的額外負擔:

 

 

伺服器端程式範例如下,藉由google回傳之action 及score值,作為開發者可以判斷的依據。

 

下面是程式執行的畫面:

 

 

 

目前電子報平台訂閱頁面已採用reCAPTCHA V3做驗證,可大幅減少人類使用者不便,如下圖:

 

 

參考資料

l   https://www.google.com/recaptcha/

l   https://www.ithome.com.tw/news/117885

l   http://science.sciencemag.org/content/358/6368/eaag2612

l   https://code.google.com/archive/p/recaptcha/wikis/FirewallsAndRecaptcha.wiki

l   https://www.inside.com.tw/article/14972-recaptcha-mystery?mc_cid=288e6c5ee9&mc_eid=275f41e9e5

l   https://technews.tw/2019/01/03/google-recaptcha-cracked/