captcha和recapcha

寫這篇文章是因爲看到了recapcha項目的介紹,覺得有必要重新認識一下captcha這個“反人類”卻又很必要的項目。

captcha並不是一個單詞而是一串單詞的縮寫 Completely Automated Public Turing Test to Tell Computers and Humans Apart(全自動區分計算機與人類的圖靈測試)。我們都知道圖靈測試是什麼,captcha的核心思想就是設計出人類能夠輕易通過但是計算機無法完成的任務,通過任務的測試結果,來確定進行操作的到底是人類還是計算機。

當我還不是知道驗證碼就是captcha一種最常見應用的時候,曾經因爲在各個網站頻繁的輸入驗證碼煩的頭疼,對這種制度充滿了惡意。

後來慢慢自己做java web開發,工作的第一年遇到了公司的某個系統被惡意攻擊,發出驗證碼的接口一天被惡意調用了幾萬次,損失了一筆錢不說,還導致系統宕機了半天。技術覆盤之後發現短信調用接口直接暴露在互聯網上,沒有任何驗證,沒有時間間隔和ip地址限制,不驗證用戶信息,隨意調用。開幾個線程,寫個循環,攻擊起來完全沒有難度。

當然這樣的設計和代碼出現,寫代碼的程序員可以去死一死了,但這件事情確實使我第一次深刻的意識到,驗證碼做了一件多麼重要的事情。

雖然系統不歸我負責,我還是一個人默默寫了一個圖形驗證碼的生成程序放到了自己代碼存檔裏,這是跟驗證碼的第一次親密接觸。

第二次接觸驗證碼,我就站在了驗證碼的對立面。公司給了一個技術預研任務,讓我想辦法做個爬蟲從網上撈點東西下來。被撈數據的那個網站就設置了很完善的驗證措施,想要拿信息,唯一的辦法就是輸入驗證碼。當時試了很多辦法,OCR的效果始終不是很好,錯誤的次數多了還會被網站的安全策略限制,苦哈哈的卡死在了驗證碼上。最後實在繞不過去,只能改變了設計方案,從爬數據本地建庫變成引入了selenium框架在每次請求數據的時候用戶輸入驗證碼的方式,才實現了獲取數據的目的。

從這次之後對驗證碼就比較熟悉了,雖然不再覺得這是一個純粹用來降低交互體驗的設計,但在自己輸入驗證碼的時候,還是說不上喜歡它。

直到前兩天看到了recaptcha項目的介紹。貼一下recaptcha項目介紹:
reCAPTCHA計劃是由卡內基梅隆大學所發展的系統,主要目的是利用CAPTCHA技術來幫助典籍數位化的進行,這個計劃將由書本掃描下來無法準確的被光學文字辨識技術識別的文字顯示在CAPTCHA問題中,讓人類在回答CAPTCHA問題時用人腦加以識別。reCAPTCHA正數位化紐約時報的掃描存檔,目前已經完成20年份的資料,並希望在2010年完成110年份的資料。

爲了驗證人類所輸入的文字是正確的,而不是隨意輸入,有兩個字會被顯示出來;一個是光學文字辨識軟體無法辨別的字,另一個是一個已經知道正確答案的 字。如果使用者正確的回答出已知正確答案的字,那麼就假設所輸入的另一個光學辨識軟體無法辨識的字是認真的檢視後被輸入而非隨便輸入

reCAPTCHA 問題的所需的文字圖片,首先會由 reCAPTCHA 計劃網站利用 Javascript API 取得, 在終端使用者回答問題後,伺服器再連回 reCAPTCHA 計劃的主機驗證使用者的輸入是否正確。 reCAPTCHA 計劃提供了許多程式語言的函式庫,讓整合 reCAPTCHA 服務到現有程式的過程可以輕鬆些。除非有較大的頻寬需求,否則 reCAPTCHA 原則上是一個免費的服務。

看完這個技術介紹和作用之後竟然莫名的覺得很感動=,=如果captcha是完成了一個技術性的工作,recaptcha無疑到達了更高的層面,是以用技術完成了人工之力不可能完成的文化傳承和記錄工作,是真正了不起的事情。
忽然的就很想自己也用技術做一點有價值的東西。

附上版權聲明:
原作者:Vi_error,博客地址:Vi_error.nextval
轉載請保持署名和註明原地址**

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章