
重點整理
想阻擋灌票、洗版這類大量重複操作,可以用 reCAPTCHA v2「我不是機器人」核取方塊,不必裝外掛:前端表單放驗證元件並設定 data-sitekey 與 callback,用 ajax 把 token 送到 functions.php 向 Google 驗證,驗證成功才顯示送出按鈕。
在瀏覽器及 AI 愈來愈強大的情況下,自學程式碼對於人們可是稀鬆平常的事,很輕易的就能看透功能背後的意義,若被看透就可能使網站置身於危險中,亦或是受到大量的操弄,比方說:投票。
投票許多頒獎典禮與粉絲互動的方式,也是收集粉絲族群樣態的最好時機,通常主辦單位會要求粉絲投票前先在平台註冊並填寫基本資料成為會員,註冊的步驟除了是樣本的收集,更是為了防止「灌票的行為」,若沒有會員的投票,只要使用者自己清 cookies,前端就沒有了判斷紀錄,使用者想投幾票就能投幾票。
今天要介紹的「我不是機器人」,就是最簡單有效來阻擋有心人士大量在網站上做重複動作或是洗版的方法。
v2 核取方塊

form.php

💬說明:
A.data-sitekey 是申請的 sitekey;data-callback 是打勾時需執行的 function;expiredCallback 是過期時會執行的 function
B.使用 ajax 將 token 傳送到後台驗證.驗證成功時,將原本隱藏的送出表單按鈕顯示

functions.php

💬說明:
驗證成功會收到驗證成功,驗證失敗會收到驗證失敗的訊息.
驗證程式要注意哪些安全細節?
前端打勾只代表瀏覽器拿到一組 token,一定要在伺服器端驗證才有效:
- 密鑰只放後端:secret key 寫在 functions.php 或設定檔,不能出現在 JavaScript 或 HTML 中。
- 每次送出都驗證:不能只靠「驗證成功才顯示按鈕」,有心人可以直接呼叫送出的網址,後端收到資料時也要檢查 token。
- token 只能用一次且會過期:過期後要讓使用者重新勾選,程式中的 expired callback 就是處理這種情況。
- 驗證失敗要回應清楚:提示使用者重新驗證,不要讓表單無聲無息地沒送出。
除了 reCAPTCHA 還有哪些驗證工具?
reCAPTCHA 不是唯一選擇,可以依網站狀況挑選:
- Cloudflare Turnstile:多數情況下不需要使用者點選,對訪客干擾較小,網站不必使用 Cloudflare 代管也能使用。
- hCaptcha:運作方式和 reCAPTCHA v2 類似,有核取方塊與圖片挑戰。
- 表單外掛內建的防垃圾機制:例如隱藏欄位(honeypot),對一般垃圾訊息已有一定效果。
如果目的是防止灌票,驗證碼只能擋自動程式,搭配會員登入或 Email 驗證限制每人投票次數才完整。
常見問題
「我不是機器人」驗證是什麼?
「我不是機器人」是 Google reCAPTCHA v2 的核取方塊驗證,用來判斷操作者是真人還是自動程式。網站在表單、投票或登入頁放上這個元件,可以阻擋大量自動送出的灌票、洗版與垃圾留言。
「我不是機器人」一直跳出來或驗證失敗怎麼辦?
這通常是 Google 判斷連線有疑慮,例如使用 VPN、共用網路流量異常、瀏覽器擋了 Cookie 或 JavaScript。可以先關掉 VPN、允許 Cookie 後重試,或換一個瀏覽器。驗證機制無法也不應該被「破解」,有疑問請聯絡網站管理者。
reCAPTCHA 的金鑰要去哪裡申請?
到 Google reCAPTCHA 管理控制台登記網站網域,選擇 v2「我不是機器人」核取方塊,就會取得網站金鑰(site key)與密鑰(secret key)。網站金鑰放在前端表單,密鑰只能放在伺服器端程式中,不能寫在網頁原始碼。
結語
「我不是機器人」v2 核取方塊不需要安裝外掛:前端放上驗證元件,後端在 functions.php 向 Google 驗證 token,就能有效阻擋重複投票與大量灌水。程式碼請放在子主題裡,上線前把驗證成功與失敗兩種情況都測試過一次。
