深入淺出capthca驗證

深入淺出capthca驗證

傳統Capthca的演進

隨著十年前Web2.0的世界越來越發達,舉凡論壇或向留言板這樣的服務開始盛行,隨之而來的造成網路爬蟲與機器人也不斷進步,網路上開始大量出現藉由在各大論壇或留言版留垃圾廣告文的機器人興起。因此為了防堵機器人模擬人類的行為進行註冊或留言,開始出現了圖形辨識碼的技術,這項技術假使只有人類能辨別出圖形中的文字,像下面這些都是圖形驗證碼的範例:
captcha-example
reCAPTCHA在2009年被Google收購,然後推出了在第一代的recpathca中提供了以圖形文字識別為基礎的API,供網站介接使用,而不需要耗費自己機器上的運算資源來產生圖形驗證碼的圖片,以下為架構流程圖:
captcha-flow
但同時也因為電腦的運算能力與圖形文字識別(OCR)的不斷進步,你可以看到這些圖形加入了大量的變形、扭曲、雜訊、模糊化來使圖形驗證碼變得更加難以識別,但是這不只對機器難以識別,同時也對人類的辨讀上造成極大的阻礙。而且近年來隨著機器學習與**圖形文字識別(OCR)**的進步,甚至到後來機器辨識的結果能比人類辨識還來得更準確且快速許多,以下為辨識範例:
captcha-example
所以現在主流的辨識機制都已經漸漸放棄這種圖形文字的識別。

No Captcha

直到數年前Google Online Security Blog宣佈新的防機器人機制「No CAPTCHA reCAPTCHA」,新的 reCAPTCHA API,讓網友只要移動滑鼠,打勾確認你是真人,就能辨識你是不是人類。

Google 表示新的技術透過 IP、使用者的 Cookie,以及滑鼠移動的模式,就能區別真人與機器人。在操作上只要使用者點擊驗證框中的**I'm not a robot**即可完成驗證,並在Google偵測到有可疑bot行為時,加入對行動裝置友善的圖片辨識機制,如下: ![no-captcha-example](http://i.imgur.com/gn6Bkbx.png) 目前這種技術已經大量被運用在許多現代的網站上來阻絕網路機器人的侵犯,並有著**Easy for human, but hard for bots**的特性使大家的接受度更高。

分析No Captcha的運作方式

根據Google官方的**reCaptcha v2.0(no captcha)所提供的資訊其實不多,畢竟驗證的詳細方法如果被公開了,會有機會使得防護的能力因此下降,但有國外網友嘗試反編譯reCaptcha v2.0(no captcha)**的API並嘗試找出和驗證是否為bot的因素,參考文章:
[Reverse-engineering the new "captchaless" ReCaptcha system](Reverse-engineering the new “captchaless” ReCaptcha system...)

從中我們得知比起官方所宣布的一些資訊外,還運用了更多輔助辨識是否為真人的驗證因素:

  • Plug-ins
  • User-agent
  • Screen resolution
  • Execution time, timezone
  • Number of click/keyboard/touch actions in the <iframe> of the captcha
  • It tests the behavior of many browser-specific functions and CSS rules
  • It checks the rendering of canvas elements
  • Likely cookies server-side (it's executed on the www.google.com domain)
  • And likely other stuff...

新一代Invisible reCAPTCHA

Google發表隱形reCAPTCHA技術,於2017年3月份正式上線,在最新驗證機制中,大部份使用者不會再看到I'm not a robot的確認框,只有可疑程式及機器人才需通過考驗。

新的reCAPTCHA結合機器學習及進階風險分析技術,例如使用者點入網頁後,根據滑鼠動作或IP位址等來判斷他是否有可疑行為。如果一切正常就不會看到任何驗證機制,如果Google判斷有異常跡象,就會顯示傳統上的reCAPTCHA謎題。

這項技術使得在驗證上又更加的方便,正常人完全不需點選即任何證明自己為真人的操作即可在背景中完成驗證。