The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

介紹好用工具:reCAPTCHA (免費的 CAPTCHA 驗證服務)

我想大家都知道什麼是 CAPTCHA,且實作 CAPTCHA 機制在技術上應該也不是甚麼難事,不過市面上也已經有不少人提出破解 CAPTCHA 圖片驗證的技術了,所以若要自己實作較複雜的 CAPTCHA 驗證機制其實還是有點難度的,我今天我就跟各位介紹一個偷懶的方法,也就是我之前曾經使用過的 reCAPTCHA 線上服務。

reCAPTCHA 是一個免費、且提供線上 CAPTCHA 驗證的服務,reCAPTCHA 提供的驗證機制據稱是十分的安全,他提供的服務中除了 CAPTCHA 基本的【圖片驗證】之外,另外還提供【語音驗證】的服務,而這部分若要自行實作也是有些難度的。

reCAPTCHA 是以類似 Web Service 的方式提供服務的,若要了解 reCAPTCHA 的運作方式,可以參考下列圖片:

API diagram

  1. 使用者載入現有網頁時,也同時載入一個透過 JavaScript 嵌入的 reCAPTCHA 挑戰(challenge)介面。所謂的挑戰介面就是指要進行 CAPTCHA 驗證的區塊。
  2. 使用者從 reCAPTCHA 取得挑戰後,reCAPTCHA 就會顯示一串挑戰的文字讓使用者進行人工識別。
  3. 使用者輸入自行辨識後的文字在挑戰區塊的表單裡,使用者在將輸入的回應資訊(challenge token)連同原本的表單資訊 POST 回到 Server 端。
  4. Server 端的程式收到後,會將資訊送到 reCAPTCHA 驗證是否正確,然後再將結果回應給你 Server 端的程式。
  5. 如果驗證成功,你就可以在 Server 端進行相關作業,例如:建立使用者、將發表的文章寫入資料庫、或其他動作。若驗證失敗,你可以繼續顯示表單並請使用者重新輸入一遍。 

若要在你現有的網站上使用 reCAPTCHA 服務基本上幾乎不用寫什麼複雜的程式,通常只要幾行指令就可以輕易的將 reCAPTCHA 服務套用到現有的網站上。在 reCAPTCHA 網站的 Resources 網頁中所列出的 Programming Environment Plugins 就包含了以下程式語言:

  • PHP
  • ASP.NET ( 網站上的範例雖然是 VB.NET 但下載的壓縮檔中有包含 C# 範例喔 )
  • Classic ASP: see this forum post
  • Python
  • Perl (contributed by Andy Armstrong)
  • Ruby (contributed by McClain Looney)
  • Another Ruby library from Jason L Perry
  • Java (contributed by Soren)
  • JSP Mailhide Tag (contributed by Tamas Magyar)
  • ColdFusion (contributed by Robin Hilliard)

若要套用到一些網路上知名的應用程式,reCAPTCHA 也提供以下應用程式的外掛套件:

除此之外,網站上還有提供 reCAPTCHA API 與 MailHide API 可供任何其他程式語言自行開發外掛,可說是一個十分貼心的服務,推薦大家可以試試看。

相關連結