Skip to main content

關閉 Cloudflare JavaScript Detection (JSD)

Cloudflare Pages/Workers 會在你的網站自動塞入 /cdn-cgi/ 腳本,本文教你如何關掉這兩個煩人的東西。

在瀏覽器中 F12 開啟開發者工具後,移動到 Network 網路面板,進入你的網站或是重新整理看 Network 列出的所有請求,有 main.js 且路徑是 /cdn-cgi/challenge-platform/scripts/jsd/main.js 之類的路徑,這就是 Cloudflare 硬塞到你網站中的 JavaScript。

狀態檢查

你可以跳過這步驟,反正等一下就是要用命令行改掉這個設定。

進入 Cloudflare -> Domains 進入你的 domain -> 左側 Security 展開 -> 進入展開後的 Settings -> 查看 Bot fight mode

你會發現即使關閉 Bot fight mode 底下的 JS Detections 仍然是 On 且沒有關閉按鈕。

開始設定

參考這篇文章完成,該文章使用舊版認證方式,本文以新版 API 完成。

建立 API 金鑰

API 金鑰讓你透過命令行操作你的帳號,讓 Cloudflare 知道你有什麼權限進行什麼操作。

  1. 點右上方頭像展開 menu
  2. 點 menu 的 Profile 進入
  3. 點左側的 API Tokens
  4. 點右上角的 Create Token 按鈕
  5. 選擇 Create Custom Token
    1. Token name: Disable JSD javascriont detection
    2. Permissions:
      1. Zone - Bot Management - Edit
    3. Zone Resources: 預設,Include - All zones
    4. Continue to summary
  6. 測試你的 Token,就像裡面提供的指令一樣 curl "https://api.cloudflare.com/client/v4/user/tokens/verify" \ -H "Authorization: Bearer cfut_XXXXXXX"

透過 API 關閉 JSD

cfut_XXXXXXXXXXXXXXXXXXXXXXXX 換成你自己的 API Token,貼上以下指令:

curl https://api.cloudflare.com/client/v4/zones/2342ef70769210373204fe7615d5185e/bot_management \
-X PUT \
-H "Authorization: Bearer cfut_XXXXXXXXXXXXXXXXXXXXXXXX" \
-H "Content-Type: application/json" \
-d '{
"enable_js": false,
"fight_mode": false
}'

如果成功,Cloudflare 會回傳

{
"result": {
"enable_js": false,
"fight_mode": false,
"ai_bots_protection": "disabled",
"content_bots_protection": "disabled",
"crawler_protection": "disabled",
"ai_training": "disabled",
"ai_search": "disabled",
"ai_user": "disabled",
"is_robots_txt_managed": false,
"cf_robots_variant": "off",
"ai_bots_migration_opt_out": false,
"using_latest_model": true
},
"success": true,
"errors": [],
"messages": []
}

dashboard 顯示結果不更新是正常的,請用 F12 開發者工具檢查網路請求,沒有那些 main.js 就代表成功了,可以回去面板把這個 token 刪掉。