星期四, 19 6 月, 2025
No Result
View All Result
育心文具行

育心文具行

  • 首頁
  • 心得x體驗
  • 筆記x備忘
  • 閒談x雜記
  • 我的工具箱
  • 關於我
育心文具行
  • 首頁
  • 心得x體驗
  • 筆記x備忘
  • 閒談x雜記
  • 我的工具箱
  • 關於我
No Result
View All Result
育心文具行
Home 筆記x備忘

如何在網站中整合 Google reCAPTCHA v3

2024-10-22
in 筆記x備忘
Reading Time:5 mins read
A A
0

關於 Google reCAPTCHA v3 ,才想起來之前用的幾乎都是 v2 ,應該更新一下自己的技能樹,真的腿。

幾個注意事項:

  1. 幾個注意的要點:
    • 引用 js 檔案,注意前端使用 site key
    • 後端的 Secret Key 作驗證,注意不要外流
  2. 下面提供操作流程,除了使用 js 驗證的方法之外,官網也由提供 onSubmit 的方法,參考這裡。
  3. 後端確認的說明參考官網,這裡。注意分數的判斷。
  4. 如果不想用分數來做判斷,可以選用 v2 ,他也有不同的操作模式,參考這裡和這裡。
  5. 有其使用限制,不同版本參考這裡,免費上限是 10k / 月,注意是一個帳戶。
  6. 有一些操作細節,像是 action 的設置可以作為不同驗證分數的評估手段等等。

另外除了 Google reCAPTCHA v3 也有其他替代品,Cloudflare 也提供 Turnstile ,計費方式不太一樣。除了上述兩個,還有 hCaptcha ,甚至他還提供了 reCAPTCHA 轉換 hCAPTCHA 的說明,價格參考這裡(好像免費只能試用?)。

Google reCAPTCHA v3 驗證邏輯上大概就是 Google 透過魔法(笑)在前端透過瀏覽器判斷這個用戶是不是機器人,產出一個驗證的落落長咒語,然後傳給後端確認,後端透過回傳給 google 來判斷 score,自行判斷是不是機器人,我理解大致上 0.5 以上就是人類。

關於操作的流程,其實官網文章其實已經說了很明白了。既然要水字數的話,來人阿!上 AI:

如何在網站中整合 Google reCAPTCHA v3

Google reCAPTCHA v3 是一個無干擾的防護機制,它不需要使用者解決驗證挑戰,透過評分系統自動識別惡意行為。以下將介紹如何在網站中實作 reCAPTCHA v3 的步驟。

步驟 1: 註冊 Google reCAPTCHA v3

  1. 進入 Google reCAPTCHA 管理台。
  2. 登入你的 Google 帳戶,並填寫下列資訊:
    • 標籤:為這個 reCAPTCHA v3 設定提供一個識別名稱。
    • reCAPTCHA 類型:選擇 “reCAPTCHA v3″。
    • 網域:輸入你網站的網域名稱。
    • 所有者:設定擁有這個 reCAPTCHA 的電子郵件。
  3. 同意 reCAPTCHA 服務條款,並點擊 “提交”。

完成註冊後,你將獲得 站點金鑰 (Site Key) 和 祕密金鑰 (Secret Key)。

步驟 2: 將 reCAPTCHA v3 加入你的網站

在你的 HTML 頁面中,加入下列 JavaScript 程式碼以載入 reCAPTCHA v3:

<script src="https://www.google.com/recaptcha/api.js?render=你的站點金鑰"></script>

在你想要執行驗證的操作中(例如表單提交),調用 grecaptcha.execute():

<script>
  grecaptcha.ready(function() {
    grecaptcha.execute('你的站點金鑰', {action: 'submit'}).then(function(token) {
      // 將 token 傳送至你的伺服器進行驗證
    });
  });
</script>

步驟 3: 在後端進行驗證

當使用者提交表單時,你需要在伺服器端驗證 reCAPTCHA token。以下範例為使用 PHP 進行驗證:

<?php
  $token = $_POST['token'];
  $secret_key = '你的祕密金鑰';

  $response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret={$secret_key}&response={$token}");
  $responseKeys = json_decode($response, true);

  if ($responseKeys["success"] && $responseKeys["score"] >= 0.5) {
    // 驗證通過,繼續處理表單
  } else {
    // 驗證失敗,阻止表單提交
  }
?>

步驟 4: 調整評分閾值

Google reCAPTCHA v3 使用 0 到 1 的評分來衡量使用者行為,1 表示良好使用者,0 表示惡意行為。你可以根據需求來調整評分閾值,例如將其設為 0.5 以上代表驗證通過。

以上,再來補一個 Cloudflare Turnstile 操作流程。

Cloudflare Turnstile 操作流程

1. 註冊並取得 Turnstile 金鑰

  • 首先,登入你的 Cloudflare 帳戶,進入 Turnstile 管理頁面。
  • 點選「新增站點」,輸入你的網站名稱和網域,選擇所需的小工具模式(例如隱形或管理模式)。
  • 完成後,系統會生成一組 sitekey 和 secret key,請妥善保存這些金鑰,因為它們將用於驗證操作。

2. 在網站前端加入 Turnstile

在你的 HTML 頁面 <head> 區塊中插入以下 JavaScript 程式碼,用以載入 Turnstile 小工具:

<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>

接著,在需要驗證的位置,加入以下 HTML 元素,例如表單內:

<form id="login-form" action="/login" method="POST">
    <input type="text" name="username" placeholder="用戶名" required>
    <input type="password" name="password" placeholder="密碼" required>
    <div class="cf-turnstile" data-sitekey="YOUR-SITE-KEY"></div>
    <button type="submit">登入</button>
</form>

這段代碼會在頁面上自動載入 Turnstile 小工具,用於保護表單提交。

3. 後端驗證 Turnstile Token

當使用者提交表單後,Turnstile 會返回一個 token,必須在伺服器端進行驗證。

以下是後端驗證 token 的範例:

<?php
  // 從表單中接收 Turnstile 的 response token
  $turnstileToken = $_POST['cf-turnstile-response'];
  
  // 你的 secret key,請妥善保管
  $secretKey = 'your-secret-key';

  // 設置驗證請求的參數
  $data = [
    'secret' => $secretKey,
    'response' => $turnstileToken,
    'remoteip' => $_SERVER['REMOTE_ADDR'] // 可選的,用來記錄用戶 IP
  ];

  // 初始化 cURL
  $ch = curl_init();

  // 配置 cURL 請求
  curl_setopt($ch, CURLOPT_URL, "https://challenges.cloudflare.com/turnstile/v0/siteverify");
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

  // 執行 cURL 請求並獲取回應
  $response = curl_exec($ch);
  curl_close($ch);

  // 將 JSON 格式的回應轉換為 PHP 陣列
  $responseData = json_decode($response, true);

  // 檢查驗證結果
  if ($responseData['success']) {
    // 驗證成功,執行你的邏輯
    echo '驗證成功,繼續進行處理';
  } else {
    // 驗證失敗
    echo '驗證失敗,請重試';
  }
?>

你也可以用 Cloudflare Worker 處理:

// This is the demo secret key. In production, we recommend
// you store your secret key(s) safely.
const SECRET_KEY = "1x0000000000000000000000000000000AA";

async function handlePost(request) {
  const body = await request.formData();
  // Turnstile injects a token in "cf-turnstile-response".
  const token = body.get("cf-turnstile-response");
  const ip = request.headers.get("CF-Connecting-IP");

  // Validate the token by calling the
  // "/siteverify" API endpoint.
  let formData = new FormData();
  formData.append("secret", SECRET_KEY);
  formData.append("response", token);
  formData.append("remoteip", ip);

  const url = "https://challenges.cloudflare.com/turnstile/v0/siteverify";
  const result = await fetch(url, {
    body: formData,
    method: "POST",
  });

  const outcome = await result.json();
  if (outcome.success) {
    // ...
  }
}

此步驟確保 token 是有效的,且未被重複使用,防止重放攻擊。

4. 從 Google reCAPTCHA 遷移

如果你目前使用的是 Google reCAPTCHA,可以使用 Turnstile 的兼容模式,修改載入腳本:

<script src="https://challenges.cloudflare.com/turnstile/v0/api.js?compat=recaptcha" async defer></script>

將現有代碼中的 grecaptcha.render() 呼叫,改為使用你的 Turnstile sitekey,這樣可以無縫切換。

透過這些步驟,你可以在網站中輕鬆整合 Cloudflare Turnstile,提升網站安全性並替代傳統的驗證碼工具。

—

同場加映:

hCaptcha 運作的循序圖,這類操作大多都類似。

Cloudflare 提供 Turnstile 的計費方式(此為 2024-10-22 時截圖)。這種服務大多就是搶市佔率,然後套養殺的商業模型。到時看看有沒有越來越貴就知道他用的人多不多了。

Tags: cloudflareGooglehCaptchareCAPTCHA
Share22Tweet14
Previous Post

使用 Nginx 基本認證保護動態內容。以一個舊網站為例。

Next Post

解決 PHP8.2 mb_convert_encoding 方法已經棄用的問題。

Related Posts

筆記x備忘

實作 js 函式庫包裝為 API 提供給後端呼叫

最近在想有滿多 js 實作資料處理的函式...

2025-02-04
100
筆記x備忘

使用 Cloudflare Workers 處理前端跨域問題

在 Web Application 走前...

2024-09-01
100
筆記x備忘

使用 Nginx 設定通過 Cloudflare 的真實 IP 與只允許 Cloudflare IP 來的流量。

一次講兩件事,都是和 Cloudflar...

2024-08-07
100
筆記x備忘

Cloudflare Workers 服務介紹

如果有使用 cloudflare 服務,...

2022-10-17
100
Load More
Next Post

解決 PHP8.2 mb_convert_encoding 方法已經棄用的問題。

Debian 11 中更改系統語言,解決亂碼問題

Sublime Text3 檢查 Codeigniter4 專案的外掛

全站搜尋

No Result
View All Result

關於我

育心文具行

Jerry Lin

程式設計師

育心文具行是一家文具店,老闆的小兒子是一個設計師,職業是設計程式,興趣是設計人,倒是還沒有實作的機會。
--
所有的相遇都不是巧合。
在廣告公司待了三年有兩年多在做內容產品,離職後繼續在內容產業走了四年多,最後選則離開台灣的公司體制在家 SOHO ,碰上了 2020 年疫情才知道原來自己這是走在時代的潮流尖端。 感謝許多老闆和貴人相助,至今目前尚能存活,在台北街頭努力著。

近期文章

  • 於 MacOS 中,整合自然語言,自動化添加行事曆事件
  • 使用 deepwiki-open 針對程式碼產生 WIKI
  • 使用 Tailwind CLI 快速建立靜態 CSS 檔的基本步驟
  • Visual Studio Code 的 PHP CS Fixer 設定
  • MacOS 添加本地伺服器的 DNS

分類

  • 心得x體驗 (45)
  • 筆記x備忘 (77)
  • 閒談x雜記 (13)

贊助買咖啡

Facebook Instagram RSS

標籤

ai android cloudflare flutter git ios javascript linode linux MAC macos mis nginx php plugin QBQ!問題背後的問題 server work sublime sublime text vps vue.js vue3 What if What If? 如果這樣,會怎樣? wordpress 前端 原則 原子習慣 團隊,從傳球開始 團隊,從傳球開始:五百年都難以超越的 UCLA 傳奇教練伍登培養優越人才和團隊的領導心法 壓力測試 外掛 如果這樣,會怎樣?:胡思亂想的搞怪趣問 正經認真的科學妙答 心得 情緒 活動心得 灰階思考 約翰‧漢尼斯 股癌 自慢10 自慢10:18項修練 記錄 謝孟恭 讀書心得 這一生,你想留下什麼?

文章分類

  • 心得x體驗 (45)
  • 筆記x備忘 (77)
  • 閒談x雜記 (13)

近期文章

  • 於 MacOS 中,整合自然語言,自動化添加行事曆事件
  • 使用 deepwiki-open 針對程式碼產生 WIKI
  • 使用 Tailwind CLI 快速建立靜態 CSS 檔的基本步驟
  • Visual Studio Code 的 PHP CS Fixer 設定
  • MacOS 添加本地伺服器的 DNS

近期留言

  • 「Bolin Lai」於〈WordPress 之中藍新金流開啟後, Elementor 外掛有時會打不開的問題處理〉發佈留言
  • 「Jerry Lin」於〈WordPress 之中藍新金流開啟後, Elementor 外掛有時會打不開的問題處理〉發佈留言
  • 「JCL」於〈WordPress 之中藍新金流開啟後, Elementor 外掛有時會打不開的問題處理〉發佈留言

文章月曆

2025 年 6 月
日 一 二 三 四 五 六
1234567
891011121314
15161718192021
22232425262728
2930  
« 5 月    

© 2020 hipster.crazyjerry.studio - a blog about experience, notes and nonsense, by Jerry Lin.

No Result
View All Result
  • 首頁
  • 心得x體驗
  • 筆記x備忘
  • 閒談x雜記
  • 我的工具箱
  • 關於我

© 2020 hipster.crazyjerry.studio - a blog about experience, notes and nonsense, by Jerry Lin.