Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

mac的safari連結we.alearn.org.tw的cloudflare驗證一直失敗 #226

Closed
1 task done
leechiuhui opened this issue Oct 9, 2024 · 4 comments
Closed
1 task done
Labels
bug Something isn't working enhancement New feature or request

Comments

@leechiuhui
Copy link
Collaborator

leechiuhui commented Oct 9, 2024

不著急,先記錄一下,有以下幾點(陸續增加或減少):

  • mac的safari連結we.alearn.org.tw的cloudflare驗證一直失敗
截圖 2024-10-09 下午4 57 01
@leechiuhui leechiuhui added the 🍵Take it easy放輕鬆 No rush to get it done, just do it when you have time.不著急完成,有餘裕再做。 label Oct 9, 2024
@bestian bestian added this to the UX/UI與視覺設計 milestone Oct 9, 2024
@bestian bestian added bug Something isn't working enhancement New feature or request 需切分成幾個小議題 需切分成幾個小議題 labels Oct 9, 2024
@bestian bestian pinned this issue Oct 9, 2024
@bestian bestian removed 🍵Take it easy放輕鬆 No rush to get it done, just do it when you have time.不著急完成,有餘裕再做。 需切分成幾個小議題 需切分成幾個小議題 labels Oct 9, 2024
@bestian
Copy link
Contributor

bestian commented Oct 9, 2024

@leechiuhui

Safari也可以啟動開發者模式。
請問當無法通過旋轉門時,console裡有什麼錯誤訊息呢? 這對debug來說很有意義,請再附上。謝謝~

@leechiuhui
Copy link
Collaborator Author

[Log] / (app.fefd3318.js, line 1)
[Log] / (app.fefd3318.js, line 1)
[Info] Successfully preconnected to https://www.googletagmanager.com/
[Log] b (home.f1388ae7.js, line 1)
[Error] Blocked a frame with origin "https://challenges.cloudflare.com" from accessing a frame with origin "https://we.alearn.org.tw". Protocols, domains, and ports must match.
(匿名函數) (v1:1:92026)
(匿名函數) (v1:1:92231)
gk (v1:1:92272)
eY (v1:1:50712)
f (v1:1:29691)
[Warning] window.styleMedia is deprecated draft version of window.matchMedia API that is not implemented in Firefox and will be removed from the web platform in future. (x2)
[Log] (v1, line 1)
[Debug] Error — v1:1:124653 (v1, line 1)
[Log] fhnI (v1, line 1)
[Log] fhnI (v1, line 1)
[Log] DHXA (v1, line 1)
[Log] DHXA (v1, line 1)
[Log] (v1, line 1)

[Log] (v1, line 1)
[Debug] �: 1 (v1, line 1)
[Debug] �: 2 (v1, line 1)
[Debug] NaN (v1, line 1)
[Debug] NaN (v1, line 1)
[Log] "" (v1, line 1)
沒有特性

[Log] "" (v1, line 1)
沒有特性

[Log] NaN (v1, line 1)
[Log] NaN (v1, line 1)
[Error] NaN
gq (v1:1:20447)
(匿名函數) (v1:1:92026)
(匿名函數) (v1:1:92231)
gk (v1:1:92272)
gq (v1:1:20425)
(匿名函數) (v1:1:92026)
(匿名函數) (v1:1:92231)
gk (v1:1:92272)
gq (v1:1:20447)
(匿名函數) (v1:1:92026)
(匿名函數) (v1:1:92231)
gk (v1:1:92272)
gq (v1:1:20425)
(匿名函數) (v1:1:92026)
(匿名函數) (v1:1:92231)
gk (v1:1:92272)
gq (v1:1:20425)
(匿名函數) (v1:1:92026)
(匿名函數) (v1:1:92231)
gk (v1:1:92272)
[Error] NaN
gq (v1:1:20447)
(匿名函數) (v1:1:92026)
(匿名函數) (v1:1:92231)
gk (v1:1:92272)
gq (v1:1:20425)
(匿名函數) (v1:1:92026)
(匿名函數) (v1:1:92231)
gk (v1:1:92272)
gq (v1:1:20447)
(匿名函數) (v1:1:92026)
(匿名函數) (v1:1:92231)
gk (v1:1:92272)
gq (v1:1:20425)
(匿名函數) (v1:1:92026)
(匿名函數) (v1:1:92231)
gk (v1:1:92272)
gq (v1:1:20425)
(匿名函數) (v1:1:92026)
(匿名函數) (v1:1:92231)
gk (v1:1:92272)
[Info] NaN (v1, line 1)
[Info] NaN (v1, line 1)
[Log] NaN (v1, line 1)
[Log] NaN (v1, line 1)
[Log] (v1, line 1)
[Log] (v1, line 1)
[Log] 追蹤:NaN
gq (v1:1:20447)
(匿名函數) (v1:1:92026)
(匿名函數) (v1:1:92231)
gk (v1:1:92272)
gq (v1:1:20425)
(匿名函數) (v1:1:92026)
(匿名函數) (v1:1:92231)
gk (v1:1:92272)
gq (v1:1:20447)
(匿名函數) (v1:1:92026)
(匿名函數) (v1:1:92231)
gk (v1:1:92272)
gq (v1:1:20425)
(匿名函數) (v1:1:92026)
(匿名函數) (v1:1:92231)
gk (v1:1:92272)
gq (v1:1:20425)
(匿名函數) (v1:1:92026)
(匿名函數) (v1:1:92231)
gk (v1:1:92272)
[Log] 追蹤:NaN
gq (v1:1:20447)
(匿名函數) (v1:1:92026)
(匿名函數) (v1:1:92231)
gk (v1:1:92272)
gq (v1:1:20425)
(匿名函數) (v1:1:92026)
(匿名函數) (v1:1:92231)
gk (v1:1:92272)
gq (v1:1:20447)
(匿名函數) (v1:1:92026)
(匿名函數) (v1:1:92231)
gk (v1:1:92272)
gq (v1:1:20425)
(匿名函數) (v1:1:92026)
(匿名函數) (v1:1:92231)
gk (v1:1:92272)
gq (v1:1:20425)
(匿名函數) (v1:1:92026)
(匿名函數) (v1:1:92231)
gk (v1:1:92272)
[Warning] NaN (v1, line 1)
[Warning] NaN (v1, line 1)
[Log] Request for the Private Access Token challenge. (v1, line 1)
[Log] The next request for the Private Access Token challenge may return a 401 and show a warning in console. (v1, line 1)
[Error] Failed to load resource: the server responded with a status of 401 () (7iNMrVJmCANFu9f, line 0)
[Warning] The resource https://challenges.cloudflare.com/cdn-cgi/challenge-platform/h/b/cmg/1/vb3biZmUigdnkWMSHlb1xumUaiHC9PGLsjfSZho%2Fr4E%3D was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it wasn't preloaded for nothing.
截圖 2024-10-10 上午11 41 15
截圖 2024-10-10 上午11 41 22

@bestian
Copy link
Contributor

bestian commented Oct 10, 2024

@leechiuhui
我這邊無法重現問題和debug,
剛剛測了一下。我這邊的macOS是15.0.1,Safari可以通過we.alearn.org.tw的旋轉門驗證。

關鍵應該是你那邊的最後一個錯誤碼Cloudflare Trustile 的 Error 300010。

問了一下chatGPT:

Cloudflare Trustile 的 Error 300010 通常與驗證過程中的問題有關。Cloudflare Trustile 是一種 CAPTCHA 替代技術,用於區分真實用戶與自動機器人的請求。這個錯誤通常意味著在驗證過程中發生了一些問題,導致無法正確完成驗證。

以下是幾個可能的原因:

配置錯誤:Trustile 的設置或配置可能存在問題,特別是當你在使用 Cloudflare 時,伺服器或應用端的配置可能不正確,導致驗證失敗。

網絡問題:用戶的網絡環境或伺服器與 Cloudflare 之間的連線可能有暫時的中斷或不穩定,導致驗證請求未能成功傳遞或返回。

資源載入失敗:Trustile 依賴於某些資源的正確加載,例如 JavaScript。如果這些資源未正確加載,可能會導致該錯誤。

你可以採取以下步驟進行排查和解決:

檢查 Cloudflare 設置:確保 Trustile 的配置正確,並且應用伺服器端的 API 金鑰和驗證邏輯是正確的。

測試連接:檢查網絡是否穩定,並確保沒有防火牆或代理阻止 Cloudflare 的請求。

瀏覽器開發者工具調查:使用開發者工具查看 JavaScript 資源是否正確加載,有無錯誤訊息與此錯誤相關。

如果問題持續,建議查閱 Cloudflare 的官方文件或聯絡 Cloudflare 支援團隊,進一步診斷具體原因。

@leechiuhui
Copy link
Collaborator Author

@bestian 哈囉,老師。上次收工後,今天再次用同樣電腦同樣瀏覽器測試,但也模擬不出同樣錯誤了。
上次我都是用safari的私密視窗/無痕視窗測試且把cookies清除的很乾淨,而且當時同時有用另外一台Mac的safari測試也是被cloudflare驗證失敗。那根據下面我請ChatGpt「教導我 cloudflare的turnstile的驗證邏輯和每一個技術步驟。」的內容來看是否有.......可能是因為今天換了一個網路環境,我從UK連的關係?所以cloudflare驗證成功了......... ?


「請教導我 cloudflare的turnstile的驗證邏輯和每一個技術步驟。」
Cloudflare Turnstile 是一種無需 CAPTCHA 的用戶驗證工具,旨在用更友好的方式來區分真人和機器人。它不會像傳統 CAPTCHA 那樣要求用戶進行圖像選擇或其他挑戰,而是使用多種技術與機制來自動評估用戶的行為。以下是 Cloudflare Turnstile 的驗證邏輯及其每一個技術步驟:

Cloudflare Turnstile 的驗證邏輯

  1. 行為分析:Cloudflare Turnstile 在不打擾用戶的情況下,會根據用戶的行為(如鼠標移動、點擊模式、鍵盤操作等)來評估是否為真人。這些行為數據會被用來進行風險評估。

  2. 設備指紋識別:Turnstile 會分析設備指紋,包括瀏覽器版本、操作系統信息、使用的代理服務器等,來判斷用戶的真實性。這有助於區分正常的用戶行為和自動化腳本。

  3. 機器學習模型:Cloudflare 使用機器學習模型來分析大量的用戶行為和設備數據,並基於這些數據生成風險評分。這個評分用來決定用戶是人類還是機器人。

  4. 與 Cloudflare 網絡的整合:因為 Turnstile 是 Cloudflare 服務的一部分,它能夠利用全球範圍內的大量數據來進行更準確的驗證,這包括之前惡意行為的 IP 地址、異常的流量模式等。

每一步的技術步驟

  1. 前端集成 Turnstile

    • 在網頁上嵌入 Cloudflare 提供的 JavaScript 代碼。這個代碼會生成一個驗證控件,可以是自動隱藏的,也可以在需要時顯示給用戶。
    • 當用戶與網頁進行互動時,JavaScript 代碼會自動收集所需的數據並傳送到 Cloudflare 的伺服器進行分析。
  2. 展示 Turnstile 表單

    • 如果用戶進行了提交(例如表單提交或登入請求),前端會向 Cloudflare 發送請求,獲取一個驗證令牌(Token)。
    • Cloudflare 會基於前端收集到的用戶數據生成這個令牌,用來識別該請求是否需要進一步驗證。
  3. 後端驗證 Token

    • 當前端將驗證令牌回傳到伺服器(例如通過 POST 請求),你的後端應該使用 Cloudflare 提供的 API 來驗證這個令牌。
    • 後端會向 Cloudflare 的驗證 API 發送請求,並提供前端生成的驗證令牌和密鑰(secret key)。
    • Cloudflare 會回傳驗證結果,包括一個 success 欄位來告知這個令牌是否有效。
  4. 處理驗證結果

    • 如果 Cloudflare 的回應結果為成功 (success: true),後端即可進行下一步操作,例如允許用戶登入或處理表單數據。
    • 如果回應為失敗 (success: false),則可以拒絕該請求,並通知用戶驗證失敗或要求再次嘗試。
  5. 異常處理

    • 在整個驗證過程中,如果遇到 API 請求錯誤(如連接失敗、Token 過期等),後端應該有相應的異常處理邏輯,並向用戶提供適當的提示。
    • 後端還應該設置重試機制或記錄錯誤以便後續排查。

Cloudflare Turnstile 的技術架構總結

  1. 前端收集數據:JavaScript 在前端嵌入,收集行為數據和設備信息。
  2. Cloudflare 分析數據:這些數據被傳送到 Cloudflare 的伺服器進行分析,並生成驗證令牌。
  3. 後端驗證令牌:伺服器端使用 Cloudflare API 驗證這個令牌的真實性。
  4. 允許或拒絕請求:基於 Cloudflare 的驗證結果,決定是否允許用戶繼續。

這樣的流程既能確保用戶體驗(不必進行繁瑣的挑戰),又能提供高效的機器人防護。如果有其他更具體的需求或想進一步了解 API 的細節,可以參考 Cloudflare 的官方文件。

@bestian bestian unpinned this issue Jan 4, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants