分類
Python

使用自定義 x-signature 在Cloudflare中來保護API

在 Cloudflare 中, 若是有一組自己的 API, 想要簡單地透過 Cloudflare 來保護, 有很多方法, 不過大多需要是付費的版本才能提供, 像是 API Shield.

若是想要快速而輕量地達成這個 API的保護, 可以透過 Worker 來檢查 x-signature 的 header 來實現.

在 Cloudflare 的 Workers & Pages 介面,  Create application, 然後給定一個名稱如 api-check, 然後在右上角的 Edit Code 進入程式編輯器.

輸入以下程式碼:

分類
WebTrend

Cloudflare大當機?!

晚上持續收到網站服務異常, 經檢查發現為 Cloudflare 的問題, 查了一下新聞, 果然有不少災情.

再看一下 Downdetector 上的記錄:

從晚上 7:21 開始, 就陸續有災情傳出了, 因為自己的網站也是透過 Cloudflare 服務, 所以也持續收到 monitor 通知時好時壞, 希望能快快恢復才好.

Cloudflare 官方的狀態頁: https://www.cloudflarestatus.com/

繼上次 AWS 異常, 這次又是 Cloudflare 的異常, 看起來雲服務也需要多考慮備援與設計, 不是上雲就沒問題了.

相關新聞:

 

分類
好用軟體

IP調查小程式-功能新增

之前介紹了使用 Cloudflare worker來進行客戶端 IP調查的小程式(https://diary.tw/archives/2182), 最近新增一些功能上來.

  1. 利用瀏覽器訪問時, 會加上完整的 html, 並增加了 Google Analytics 追蹤碼, 來記錄使用的次數.
  2. 若是利用非瀏覽器訪問時, 會直接輸出純文字 ip 而不會加上其他的內容, 例如: curl https://ip.diary.tw/
  3. 利用這個 geoplugin 這個免費的 API 功能來查找對應 IP的資訊, 請參考這個 API文件說明: https://www.geoplugin.com/webservices/json, 使用方式為 https://ip.diary.tw/?data=geo, 可以查找對應 IP的所在地與該地區使用貨幣與匯率. 輸出範例如下:
{
  "geoplugin_request":"12.34.56.78",
  "geoplugin_status":200,
  "geoplugin_delay":"1ms",
  "geoplugin_credit":"Some of the returned data includes GeoLite2 data created by MaxMind, available from <a href='https:\/\/www.maxmind.com'>https:\/\/www.maxmind.com<\/a>.",
  "geoplugin_city":"New Taipei City",
  "geoplugin_region":"New Taipei City",
  "geoplugin_regionCode":"NWT",
  "geoplugin_regionName":"New Taipei City",
  "geoplugin_areaCode":"",
  "geoplugin_dmaCode":"",
  "geoplugin_countryCode":"TW",
  "geoplugin_countryName":"Taiwan",
  "geoplugin_inEU":0,
  "geoplugin_euVATrate":false,
  "geoplugin_continentCode":"AS",
  "geoplugin_continentName":"Asia",
  "geoplugin_latitude":"24.9466",
  "geoplugin_longitude":"121.586",
  "geoplugin_locationAccuracyRadius":"20",
  "geoplugin_timezone":"Asia\/Taipei",
  "geoplugin_currencyCode":"TWD",
  "geoplugin_currencySymbol":"NT$",
  "geoplugin_currencySymbol_UTF8":"NT$",
  "geoplugin_currencyConverter":32.0408
}

 

請大家多加利用 IP查找小功具: https://ip.diary.tw

 

[2026/5/30 10:36]

由於原來的 ip geolocation service 已變成只有付費方案了如下:

{
  "geoplugin_status":403,
  "geoplugin_message": "geoPlugin API is no longer available for free use. To continue access, please upgrade to a paid plan",
  "geoplugin_url": "https://www.geoplugin.com/subscription"
}

 

所以改用仍有 free tier 的另一個服務: https://ipgeolocation.io/, 免費就有一定的使用量可供應用, API 也簡單, 只需要註冊帳戶, 就可以拿 API Token 去訪問取得資訊, API 使用方式請參考:

https://ipgeolocation.io/documentation/ip-location-api.html

調整一下程式碼, 之後訪問 https://ip.diary.tw/?data=geo 時, 就可以拿到對應的回傳結果如下:

{
  "ip": "12.34.56.78",
  "location": {
    "continent_code": "AS",
    "continent_name": "Asia",
    "country_code2": "TW",
    "country_code3": "TWN",
    "country_name": "Taiwan",
    "country_name_official": "Republic of China",
    "country_capital": "Taipei",
    "state_prov": "New Taipei City",
    "state_code": "TW-NWT",
    "district": "Banqiao District",
    "city": "New Taipei City",
    "zipcode": "231",
    "latitude": "24.97828",
    "longitude": "121.53948",
    "is_eu": false,
    "country_flag": "https://ipgeolocation.io/static/flags/tw_64.png",
    "geoname_id": "11697228",
    "country_emoji": "🇹🇼"
  },
  "country_metadata": {
    "calling_code": "+886",
    "tld": ".tw",
    "languages": [
      "zh-TW",
      "zh",
      "nan",
      "hak"
    ]
  },
  "currency": {
    "code": "TWD",
    "name": "New Taiwan Dollar",
    "symbol": "NT$"
  },
  "asn": {
    "as_number": "AS38841",
    "organization": "kbro CO. Ltd.",
    "country": "TW"
  },
  "time_zone": {
    "name": "Asia/Taipei",
    "offset": 8,
    "offset_with_dst": 8,
    "current_time": "2026-05-30 10:34:55.910+0800",
    "current_time_unix": 1780108495.91,
    "current_tz_abbreviation": "CST",
    "current_tz_full_name": "Taipei Standard Time",
    "standard_tz_abbreviation": "CST",
    "standard_tz_full_name": "Taipei Standard Time",
    "is_dst": false,
    "dst_savings": 0,
    "dst_exists": false,
    "dst_tz_abbreviation": "",
    "dst_tz_full_name": "",
    "dst_start": {},
    "dst_end": {}
  }
}

資訊更多元更豐富了, 歡迎多加利用.

分類
好用軟體

Googlebot來源IP

最近因為要阻擋異常流量, 使用了 Cloudflare 的 WAF 功能, 對來訪問的所有流量進行管理驗證(Managed Challenge):

https://developers.cloudflare.com/waf/reference/cloudflare-challenges/#managed-challenge-recommended

使用了這個功能後, 對來第一次來訪問的訪客都會先出現一個 Cloudflare 驗證. 若沒有問題才可以正常訪問網站.

過沒幾天, Google Search Console發信來說明影響了 Googlebot 來爬內容, 有 403的回應.

分類
WebTrend

2023年網路趨勢分析-Cloudflare Radar

從這裡看來的: https://radar.cloudflare.com/year-in-review/2023

Cloudflare 推出了 2023 review 報告, 非常全面地介紹了在 2023年的網路流量與分析, 有許多有用的參考資料.

分析與解讀可以參考官方的 blog 文章:

https://blog.cloudflare.com/radar-2023-year-in-review

主要有幾個重要的觀察點:

  • 流量相較於2022成長了 25%
  • Google仍是最受歡迎的網路服務
  • 行動設備有66%流量來自於Android
  • Starlink 成長了兩倍的流量
  • Google Analytics, React, Hubspot 是在排行前面網站中最常見的技術
  • 有 50%流量使用 HTTP/2, 有 20%流量使用 HTTP/3
  • NodeJS 是最常在在自動化 API被呼叫中被使用
  • GoogleBot 是最大量在 Cloudflare中的呼叫來源
分類
系統技術

Cloudflare提供YubiKey優惠價10元(美金)

為了將安全性提高, 降低釣魚網站風險, Cloudflare提供了 Yukikey的優惠價格10元(美金), 大家可以參考這篇來申請:

https://blog.cloudflare.com/making-phishing-defense-seamless-cloudflare-yubico/#collaborating-with-yubico

提供現有Cloudflare客戶申請, 免費方案的會員亦可, 申請後幾天會收到 Yubikey 的 Coupon代碼, 可以利用該 Coupon來購買 Yubikey 的兩款設備:

  1. Yubikey 5C NFC 原價美金55元 – https://www.yubico.com/jp/product/yubikey-5c-nfc/
  2. Yubikey 5 NFC 原價美金45元 – https://www.yubico.com/jp/product/yubikey-5-nfc/

可以用美金10元購買10支上述兩款設備, 不過由瑞典寄出, 運費為30元美金, 若只買一兩支是比較不划算.

除了 Cloudflare可以用之外, 許多的網站服務包含像是Google, Amazon, Microsoft等, 作業系統如 Windows, Mac等, 也都可以利用這個 Yubikey做二階段驗證登入, 十分方便呢.

分類
好用軟體

Cloudflare提供免費新功能Turnstile (若已是Cloudflare CDN可以直接使用Firewall的Managed Challenge功能達成)

Turnstile是一個無形且更聰明的Captcha替代品,該解決方案可從輪替的一系列瀏覽器挑戰中自動選擇,它在背景尋找來自人類使用者的訊號。

也就是用來做人類檢核功能, 而降低被機器訪問的存取驗證, 就像是之前 Google 的 reCaptcha – https://www.google.com/recaptcha/about/

這個服務免費提供給 Cloudflare用戶, 應用在非 Cloudflare CDN網路環境場景使用, 若已是在 Cloudflare提供的網路連接狀況下, 就可以直接利用 Managed Challenge 的防火牆設置(免費用戶可以有 5個 firewall rule), 更容易來實現這個功能.

防火牆設定方式請參考: https://blog.cloudflare.com/end-cloudflare-captcha/ 其中的這個部分:

All Cloudflare customers can now choose Managed Challenge as a response option to any Firewall rule instead of CAPTCHA. We’ve also updated our dashboard to encourage all Cloudflare customers to make this choice.

(圖片引用自: https://blog.cloudflare.com/end-cloudflare-captcha/)

而新建防火牆規則可以參考: https://developers.cloudflare.com/firewall/cf-dashboard/create-edit-delete-rules/

Turnstile 實作的方式可以參考這裡的文件:

https://developers.cloudflare.com/turnstile/

繼續閱讀:

https://www.ithome.com.tw/news/153361

分類
Javascript

利用Cloudflare worker來進行客戶端IP查找

Cloudflare 有個功能, 就是在 edge 端的 worker, 可以參考:

https://developers.cloudflare.com/workers/

我們可以利用這個 worker 來做許多功能, 把它想成小型的在邊緣的處理器, 先來看一些 example 好了:

https://developers.cloudflare.com/workers/examples/

理解可以在這個 worker 處理不少事情後, 接下來實做一個簡單的功能, 像是這種取客戶端 IP 的功能:

早期也有利用 PHP 寫過取 IP 功能的小程式, 可以參考:

不過這裡要介紹的是利用 cloudflare 的 worker 來進行.

分類
好用軟體

Cloudflare的Email Routing服務已開放測試版了(包含免費版)

去年 Cloudflare 提供的 Email Routing服務:

https://blog.cloudflare.com/zh-tw/introducing-email-routing-zh-tw/

已於日前對外開放測試版了(Cloudflare Email Routing available to everyone, including free zones.):

https://blog.cloudflare.com/email-routing-open-beta/

可以利用 Cloudflare 服務提供的 Email Routing功能來進行信箱收件指派了呢, 設定方式可以參考上面的文章, 幾分鐘時間就可以完成設定, 快來試試這個好用的服務吧.

分類
好用軟體

Cloudflare提供了DDos於免費方案的警示服務了(email notification)

DDos在 Cloudflare中, 是很強而有力的防禦工具, 目前已主動提供於免費方案中可以啟用警示服務了.

詳情可以參考這篇官方資料:

https://support.cloudflare.com/hc/en-us/articles/360053216191-Understanding-Cloudflare-DDoS-alerts

而什麼程度的流量會被觸發呢? 有以下兩種條件:

  • HTTP attacks for a duration over 2 minutes that generate more than 2,000 requests per second
  • L3/L4 attacks for a duration over 2 minutes that generate more than 20,000 packets per second

所以若有需要知道被 DDos的用戶, 可以透過建立通知: HTTP DDoS Attack Alerter (中文為: HTTP DDoS 攻擊警報器) 來進行設置.