---
# System prepended metadata

title: Something about reCAPTCHA
tags: [每週科普]

---

# Something about reCAPTCHA
想必大家在創建帳戶時，都有遇過必須打勾一個「我不是機器人」的方塊，有些則是輸入圖中的數字等等驗證碼。

而前者是reCAPTCHA，後者通常為CAPTCHA。

今天我們主要著重在reCAPTCHA，但也會談到CAPTCHA，並做一些簡單的介紹、破解與如何寫出CAPTCHA等等。

而我們若要談到 reCAPTCHA，我們必須先來談談CAPTCHA。


---


## CAPTCHA
* 為一種區分人類與機器的公共自動程式。
* 由演算法生成，用來辨識使用者是否為魁儡程式。
* 根據CAPTCHA的定義，該演算法必須公開。
* 通常運用在登入頁面與創建帳戶時，確保不會出現大量機器人用戶進行垃圾訊息騷擾等。

簡單來說，CAPTCHA就是我們俗稱的驗證碼。

### CAPTCHA長什麼樣子
![](https://i.imgur.com/ukntfzp.png)
圖源:https://www.searchabledesign.com/blog/post/what-is-captcha

這是最基本的CAPTCHA，後來因為破解程式越來越強大，所以也演變出了許多不同的樣式，例如出現小圓點、直線干擾等等。

### CAPTCHA原理

隨機生成字符並保存至session，並以圖片呈現給使用者。
再將前端頁面使用者輸入的字串與後端比對。

前端、後端：前端通常指稱為給使用者使用的頁面，後端為系統管理者所使用的頁面。

**總結:系統生成字串後將其轉變成圖片，再給使用者填答。填答完成後與一開始的資料進行核對。**

### CAPTCHA生成

因為網路上很多所以我就不寫了(?
詳情請看：
* https://dotblogs.com.tw/dotnetfactory/2008/04/10/2772
* https://syu65406.tw/blog/345/phpajax%E5%AF%A6%E4%BD%9C%E7%B0%A1%E6%98%93%E5%9C%96%E5%BD%A2%E9%A9%97%E8%AD%89%E7%A2%BC

等等

值得一提的是，通常寫CAPTCHA會需要用到AJAX等。
這裡我想提出來討論AJAX。

* AJAX是一種非同步XML與JavaScript的技術。白話來說就是一般情況下使用者送出一個指令(包含整個網頁)，伺服器將指令執行處理完畢後再將整個網頁回傳給使用者，而通常有一大部分是沒有改變的，這相當耗費資源。AJAX技術改善了這整個流程，並大大提升網頁的互動性。這裡就不過多著墨了，詳情請見 https://ithelp.ithome.com.tw/articles/10159178


### CAPTCHA破解
因為網路上很多所以我就不寫了(?
* https://zhuanlan.zhihu.com/p/26078299
* https://github.com/topics/captcha-breaking

等等 都有很多資訊


---

好了 終於把CAPTCHA結束掉了0u0
接下來終於可以進入正題了


---

## reCAPTCHA

reCAPTCHA是基於CAPTCHA技術的一個偉大計劃-讓全世界的書籍數位化。
而書籍數位化時常有許多無法辨識的字，將其擷取下來，透過每次的瀏覽與CAPTCHA讓真人輸入字串，若該圖片被許多使用者輸入為同個字，即回傳至數據庫。

換句話說，我們每次的瀏覽網站可能都是正在幫助書籍數位化，是個偉大的舉動。

### 為什麼只要點一下，Google 就知道我是真人?

想必大家一定有相同疑惑，點擊按鈕這件事機器人也做得到吧?
![](https://i.imgur.com/H4BRBFE.png)


其實點擊方框後，你會傳送一組資料到google的伺服器，由伺服器進行判斷你到底是不是真人，資料包括你的IP、滑鼠軌跡等等。

這就是所謂的noCAPTCHA reCAPTCHA

而若你的分數過低，google就會進行reCAPTCHA。
在你每次幫google進行點擊含有紅綠燈的圖片的時候，可能都是幫google maps變得更美好。
![](https://i.imgur.com/ei5DQGC.png)


###### tags: `每週科普`