沒有人喜歡 CAPTCHA。瞇著眼睛辨認紅綠燈和消防栓來證明自己是人類,是對每一位誠實訪客課徵的一種稅,而那些謎題回傳給廣告網路的資料本身又是另一樁隱憂。Cloudflare Turnstile 用一種聰明、幾乎不可見的檢查取代了這一切,它在不需要謎題、不追蹤訪客、也不花你一分錢的情況下,確認訪客是人類。在 2026 年,這是保護表單免受機器人侵擾最乾淨俐落的方式。
本指南將講解 Turnstile 是什麼、為什麼它在大多數網站上勝過 reCAPTCHA,以及如何將它準確地加入任意表單中,包括許多教學都跳過的至關重要的伺服器端驗證步驟。
摘要
- Turnstile 是 Cloudflare 推出的免費、注重隱私的 CAPTCHA 替代方案,沒有可視謎題
- 它免費且額度慷慨,可在任意網站上運行,而不僅限於已接入 Cloudflare 的站台
- 設定分為兩部分:表單上的小工具,以及一個你絕不能跳過的伺服器端驗證呼叫
- 它提供 managed、non-interactive 和 invisible 三種小工具模式,以適配不同表單
- 它是聯絡表單、註冊、登入和留言框中 reCAPTCHA 的隨插即用替代方案
什麼是 Cloudflare Turnstile
Cloudflare Turnstile 是一種 CAPTCHA 替代方案,它透過在背景執行的一系列輕量、不打擾的瀏覽器挑戰來驗證訪客是否為人類。它不要求使用者解謎,而是分析來自瀏覽器的訊號,在大多數情況下靜默地確認訪客。當確實需要互動時,通常只是一個核取方塊,絕不會是圖片網格。
至關重要的是,Turnstile 的設計理念是尊重隱私。它不會為了販售廣告而對使用者進行剖析,也不依賴於在整個網路中追蹤某個人。你在獲得機器人防護的同時,不必把訪客變成一種資料產品,這對注重 GDPR 的網站而言越來越重要。
它還可在任意站台上運行。使用 Turnstile 無需將你的網域透過 Cloudflare 代理;小工具和驗證 API 可從任何地方運作。
為什麼要取代 reCAPTCHA
切換的理由很直接:
- 更好的使用者體驗。 合法訪客無需解謎,這意味著更少的表單被中途放棄。
- 隱私。 與居主導地位的替代方案不同,Turnstile 的設計目標是不為廣告而追蹤使用者。
- 免費且慷慨。 Turnstile 可免費使用,其額度對絕大多數網站而言都足夠高。
- 隨處可用。 它不要求你的 DNS 必須在 Cloudflare 上。
- 整合簡單。 一個指令碼標籤、一個小工具,再加一次伺服器端檢查。
對於大多數聯絡表單、註冊和留言系統而言,幾乎沒有理由繼續承擔傳統 CAPTCHA 在易用性上的代價。
步驟 1:建立 Turnstile 小工具
在 Cloudflare 主控台中開啟 Turnstile 並新增一個站台。你需要提供一個名稱以及小工具將運行的主機名稱。Cloudflare 會給你兩把金鑰:
- 一把放入 HTML 的 site key(公開)
- 一把留在伺服器上、用於驗證的 secret key(私有)
你還需選擇一種小工具模式:
| 模式 | 行為 |
|---|---|
| Managed | Cloudflare 根據風險決定是否顯示核取方塊(建議的預設值) |
| Non-interactive | 靜默運行,無核取方塊 |
| Invisible | 完全隱藏;全部在背景運行 |
managed 模式是大多數表單合理的起點。
步驟 2:將小工具加入你的表單
引入 Turnstile 指令碼,並把小工具元素放入你的表單。將 YOUR_SITE_KEY 替換為主控台中的 site key:
1<form action="/submit" method="POST">
2 <input type="email" name="email" required />
3
4 <!-- Turnstile widget -->
5 <div class="cf-turnstile" data-sitekey="YOUR_SITE_KEY"></div>
6
7 <button type="submit">Send</button>
8</form>
9
10<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
當小工具運行時,它會在你的表單中加入一個名為 cf-turnstile-response 的隱藏欄位,其中包含一個一次性權杖。這個權杖正是你的伺服器在下一步要驗證的內容。
步驟 3:在伺服器上驗證(不要跳過這一步)
這一步才真正提供保護,也是教學最常省略的一步。僅憑小工具什麼也證明不了;攻擊者可以直接提交你的表單。在信任這次提交之前,你必須從表單中取出權杖,並在伺服器端針對 Cloudflare 的 siteverify 端點進行校驗。
將權杖和你的 secret key 傳送到 https://challenges.cloudflare.com/turnstile/v0/siteverify:
1// Example: Cloudflare Worker or any server-side handler
2async function verifyTurnstile(token, ip, secret) {
3 const formData = new FormData();
4 formData.append("secret", secret);
5 formData.append("response", token);
6 if (ip) formData.append("remoteip", ip);
7
8 const result = await fetch(
9 "https://challenges.cloudflare.com/turnstile/v0/siteverify",
10 { method: "POST", body: formData }
11 );
12
13 const outcome = await result.json();
14 return outcome.success === true;
15}
只有當 outcome.success 為 true 時,才繼續執行表單動作(傳送郵件、建立帳號、發布留言)。如果為 false,則拒絕該提交。切勿在用戶端程式碼中暴露你的 secret key。
一個便於開發的細節:Cloudflare 提供了測試金鑰 ,它們始終通過、始終攔截,或始終強制一次互動式挑戰,因此你可以在上線前測試每一條路徑。
Cloudflare Turnstile 的常見使用情境
凡是機器人可能濫用的地方,Turnstile 都能契合:
- 聯絡表單,用於阻擋垃圾提交
- 註冊與登記,用於阻擋建立假帳號(它與 Cloudflare Pages 使用者系統 搭配得很好)
- 登入表單,用於減緩撞庫攻擊
- 留言框,在不打擾真實讀者的前提下減少垃圾訊息
- 電子報訂閱,用於保持你的名單乾淨
如果你想在整個網站上正確地設定機器人防護,包括把伺服器端驗證做到位,那是我在網站安全服務 中涵蓋的一部分內容。
重點整理
- Turnstile 是一種免費、注重隱私的 CAPTCHA 替代方案,沒有可視謎題
- 它可在任意網站上運行,而不只是 DNS 在 Cloudflare 上的站台
- 整合包括表單上的一個小工具,外加一次不可或缺的伺服器端驗證呼叫
- managed 模式是最佳預設值;non-interactive 和 invisible 模式則用於特定需求
- 始終在伺服器端驗證權杖;僅憑小工具無法提供真正的防護
- 它是表單、註冊、登入和留言中 reCAPTCHA 乾淨俐落的隨插即用替代方案
常見問題
Cloudflare Turnstile 是免費的嗎? 是的。Turnstile 可免費使用,其額度對絕大多數網站而言都足夠慷慨。標準的小工具和驗證流程不收取任何費用。
使用 Turnstile 需要把我的網站放在 Cloudflare 上嗎? 不需要。無論你的 DNS 或主機代管位於何處,Turnstile 都能在任意網站上運行。你只需一個 Cloudflare 帳號來建立小工具並取得 site key 和 secret key。
Turnstile 是 reCAPTCHA 的好替代品嗎? 對大多數網站而言,是的。它提供無謎題的更佳使用者體驗,其設計目標是尊重隱私而非為廣告追蹤使用者,並且免費。它涵蓋相同的使用情境:聯絡表單、註冊、登入和留言。
我必須在伺服器上驗證權杖嗎? 是的,始終如此。僅有用戶端小工具並不能保護你,因為機器人可以直接提交表單。你必須將權杖連同你的 secret key 一起傳送到 Cloudflare 的 siteverify 端點,並且只信任回傳 success 的提交。
Turnstile 提供哪些小工具模式? 三種:managed(Cloudflare 根據風險決定是否顯示核取方塊)、non-interactive(靜默,無核取方塊)和 invisible(完全隱藏)。managed 模式是大多數表單建議的預設值。
我可以在上線前測試 Turnstile 嗎? 可以。Cloudflare 提供測試金鑰,它們始終通過、始終攔截,或始終強制一次互動式挑戰,因此你可以在部署真實金鑰之前,於開發階段驗證每一條結果路徑。
評論