Categories: 什麼是?

什麼是 Google reCAPTCHA?

網路服務有時候很擔心受到攻擊或是 SPAM
當留言功能或是註冊功能一直受到機器人(BOT)使用垃報帳號或訊息攻擊時該怎麼辦呢?
你應該常常見到一些網路服務要求你輸入扭曲或是難以辦識的文字, 來分辦使用者是不是機器人
這樣的動作被稱為 CAPTCHA 而 Google No CAPTCHA reCAPTCHA 則是更高級、進階的防範方式…

 

 

 

什麼是 CAPTCHA

Wiki 上記錄的 reCAPTCHA : https://zh.wikipedia.org/wiki/ReCAPTCHA
大概就是說明其原理.
(reCAPTCHA 本來專做 CAPTCHA 的公司, 在 2009 年被 Google 收購)

主要的目的大部是為了防止機器人濫用服務、大量留言等問題
我們會為了防止這些問題, 請使用者輸入一些被混淆過的文字、圖形字進判斷使用者是不是真人…. , 其中最明顯的受害者就是線上訂票系統.

這張圖內包含了幾個 CAPTCHA, 你能認出幾組字呢?

上圖中的文字都還不算難!

可以看見, 除了文字之外, 還有語音輸出的功能
為了防範機器人用盡各種方法, 當然機器人的圖形辨識能力也不斷的進步
像上圖中的 “8231” 對部份機器人也不是問題了

.
.

而 Google 出品的CAPTCHA 更是利用他們強大的圖形、圖象辨識能力, 把 街景中的門牌、路牌辨識結果再加以利用一番!!

但是圖中有些文字已經難以辦識了…
雖然圖形辨識配合大數據統讓 CAPTCHA 更加有效, 但是有些文字人眼已經無法分辨了, 更嚴重的是這樣的方式也造成真人使用者的困擾, 因此 Google 推出了更加人性化的方式 “No CAPTCHA reCAPTCHA”


Google 最初推出的 reCAPTCHA 服務, 除了語音、混淆及模糊字之外, 有時也會有門牌的題目出現, 但是效果還是不好

 

 

Google reCAPTCHA 有什麼不同

可以透過 Google 的說明影片, 暸解 Google 如何解決傳統 CAPTCHA 造成的問題

 

改良後的 Google reCAPTCHA 幾乎解決了傳統 CAPTCHA 的問題
在大部份的情況下都能 “一鍵” 完成 真人使用者的檢查、驗證

這樣方便又快速的檢查方法 Google (幾乎) 做到了!
雖然不是 100% 都能 “一鍵” 完成

不過 Google reCAPTCHA 也讓這個動作變的有趣、簡單多了!
真人使用者不再需要面對扭曲人眼難以辨識的文字, 取而代之的是有趣的圖片題目, 例如選出圖中有 pizza, 有花朵等題目

選出路標、三輪車, 在聖誕時節還會出現選出禮盒的可愛題目

 

 

reCAPTCHA 的運作原理

由以前的一些文章可以知道, Google 很會搜集使用者資料, 上網習慣, 較喜愛瀏覽哪些網站, 上網時間, 購物習慣等…

reCAPTCHA 會由 Chrome 瀏覽器, 你的 Google 帳號, 網站 Cookie 等資訊
判斷你是不是真人
如果你試著把 cookie 清除, 或使用無痕模式 就有機會無法使用 “一鍵” 驗證的好處了.

 

 

如何使用 reCAPTCHA

非常簡單, 你需要準備的有 :

  • 一個工程師
  • Google 帳號
  • 一個網站, 公開或非公開都可以, 可以外連即可

Google reCAPTCHA 官網 : https://www.google.com/recaptcha/

點擊畫面上  “Get reCAPTCHA”  按鈕

畫面上可以看見已使用 reCAPTCHA 的網站, 他也有使用量統計的功能哦

欄位說明 :
Label :  輸入代表名稱, e.g. : 我的測試網站
Domains : 輸入想要使用 reCAPTCHA 的網域名稱, 每次修改網域都需要一段時間, 所以建議一次將 正式機網域, 測試機網域 和開發用網域(localhost.test) 一次輸入.
Send alerts to owners : 建議勾選, 當有大流量是會被通知, 我自己使用了一年多沒收過通知信

 


Analytics : 分析近期使用量, 量太小的時候不會顯示數值
Keys : 裡面會有可公開的 Site KEY, 後台使用需要保密的 Secret key

頁面前端的部份 :
將下列內容置於 CAPTCHA 想要出現的位置

<script src='https://www.google.com/recaptcha/api.js'></script>
<!-- CAPTCAH 主體 -->
<div class="g-recaptcha" data-sitekey="置換為你的 Site KEY"></div>

配合 form Submit 送出, 或用 ajax 都可以

 

後端驗證部份 :
POST request 的部份會收到 g-recaptcha-response 數值

接著再將指定參數 POST 給 Google 端檢查

method : POST
url : https://www.google.com/recaptcha/api/siteverify
data :
secret : 前面得到的 Secret key
response : 剛剛傳入的 g-recaptcha-response

預期回傳的結果為 (JSON 格式):

{
"success": true|false,
"error-codes": [...] // optional
}

 

PHP example :

$url = 'https://www.google.com/recaptcha/api/siteverify';
$secret_key = '6LdxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxQu';
$g_recaptcha_response = $_POST['g-recaptcha-response'];


$postdata = http_build_query(
  [
    'secret' => $secret_key,
    'response' => $g_recaptcha_response
  ]
);

$opts = ['http' =>
  [
    'method'  => 'POST',
    'header'  => 'Content-type: application/x-www-form-urlencoded',
    'content' => $postdata
  ]
];

$context = stream_context_create($opts);
$result = file_get_contents($url, false, $context);

if($result['success']) {
  echo '驗證成功';
} else {
  echo '驗證失敗';
}

 

可樂

Recent Posts

plain PHP 搭配 Slack 進行錯誤追蹤、回報(Error Tracking、Error Handling)

錯誤追蹤、回報非常重要,看到的錯誤才知道怎麼修。現今 PHP 流行的 Laravel 有很好的 Error Tracking, Error Handling。但 plain PHP 怎麼辦呢? 在 production 為了安全考量會設定…

4 years ago

Drone CI/CD 配合 Github 使用 Rsync 進行 Deploy

jenkins、circleci、travis 或 Gitlab CI 皆為目前暫知名的 CI/CD 服務,各自缺點也不言而喻...過於肥大、收費略高(?)、速度不夠快執問題...此時使用 go language 開發的 Drone 就出現啦,完全 docker 容器化的運行方式讓整個 CI…

4 years ago

Nginx brotli 設定

網頁壓縮技術中 gzip 很好用,deflate 己經過時,但你聽過 brotli 嗎? 有著比 gzip 更好、更快的壓縮效率。看起來利大於弊有什麼不用他的理由嗎?簡單從優、缺點來看 brotli!到底 brotli 布羅特利是什麼、如何設定呢。 目前大多的 web server…

4 years ago

本機使用 Docker 容器內 PHP (wrapper/expose PHP)

為什麼要讓本機使用 Docker 內 PHP? 情境... docker 容器內用的是 PHP 7.4 但你的開發本機還在跑 PHP 5.6 或是更舊,因為 dockerize 的關係會將所有相關環境都轉移到…

4 years ago

為什麼你需要密碼管理工具

為什麼你需要密碼管理工具現代人一天下來需要輸入多少組密碼,工作與生活己經和密碼密不可分! 除了足夠全安的密碼,密碼記錄、儲存的方式又足夠安全嗎?密碼管理工具可以帶來什麼幫助呢? 為什麼你需要密碼管理工具 資安問題!!大多人說著沒做壞事不怕被偷資料、監聽。嚴重曝露出現代人的基本科技素養的低落和無知 🤯 密碼的使用無所不在!! 行動裝置的普及,APP 、手機遊戲、銀行帳戶所有和生活相關的東西都需要密碼!!facebook, line 只要打開 APP 也會輸入密碼只是他是自動輸入、一般情況不可視 (auth token) 一般人最常發生的密碼資安問題…

4 years ago

簡單使用 Mysql Partition 優化查詢

mysql 資料表分區 mysql table partition 從架構上調整 mysql 的查詢效率。mysql DB 的優化可以簡單也能複雜,除了調整設定值。也可以透過水平分割(Horizontal Partitioning)、垂直分割(Vertical Partitioning) 分庫或分表將資料分散儲存減少資料搜尋、group by 時的效能消耗。拆開批次處理,理論上效率都會變好,本文就水平分割的…

4 years ago