在瀏覽某些熱門網站時,你可能會看到如下的 noCAPTCHA 介面,要求你證明自己不是機器人:

由網頁右下角(上圖[1])的 Cloudflare 字樣,可以推敲該網站正使用 Cloudflare 服務,如 DDoS 防護、CDNWAF (Web Application Firewall) ... 等等,Cloudflare 判定來自你 IP 的請求異常,故跳出 CAPTCHA 關卡要確認你不是攻擊程式。

依據 Cloudflare 的官方文件 - Understanding Cloudflare Captchas and Challenge Passage,在遇到以下情況時,Cloudflare 會跳出 CAPTCHA:

  1. 來源 IP 被標示為曾有可疑活動。
    建議用 Project Honeypot. 檢查你的 IP (上圖[2]的 Your IP,即你在網站眼中的來源 IP) 是否有前科,若有則需等待兩週後才會取消檢查。
  2. 網站擁有者封鎖來自特定國家的 IP。
  3. 使用者行為觸發了某條 WAF 規則。

IP 被誤判有害列在第一點,加上 CAPTCHA 頁的說明再三提到防毒、惡意軟體、辦公室網路有設備被感染... ,大部分人優先想到的原因是 IP 被標為可疑。但事實不然,像這則論壇討論沒有人是因為 IP 被 Project Honeypot 判定可疑造成的,我最近遇過一次的經驗,IP 也是乾淨的,真正的原因是第 3 點。

Cloudflare 具有防護功能,在接收請求後會檢查並判斷訪問者是否有威脅性,判斷依據包含 HTTP Header、User Agent、Query String、Path、Host、HTTP Method、TLS Cipher 版本、請求頻率、伺服器的回傳狀態代碼... 等等 (來源),其中「請求頻率」算是企業組織較容易踩到的雷,企業組織透過防火牆上網時會進行 NAT 轉換或經過 Proxy,該組織所有使用者對外看起來會是同一個 IP,當該組織內有多人同時瀏覽同一網站,將被視為來自同一 IP 的密集存取,便有可能越過可疑流量警戒線觸發保護機制。

像是 Rate Limiting Rule 即可設定當相同 IP 在多少時間內發送超過多少次請求時,可啟動封鎖、彈出 CAPTCHA、回應 401、故意逾時、封鎖... 等防護機制。


圖片來源

遇到 CAPTCHA 時,通過測驗系統會產生一個 Cookie 讓使用者瀏覽隨後網頁時不要每次都跳出 CAPTCHA;另外,有個 Chrome/Firefox 外掛叫 Privacy Pass 可以預先產生 30 個 Token,在遇到 CAPTCHA 出現(術語叫 I'm Under Attack! 模式)時直接通關,省去輸入驗證的程序。

最後,如果這種狀況會形成困擾,試著跟網站管理人員連絡,請對方將你的 IP 加入白名單(如果你在對方眼裡算個咖的話),或調整 Rate Limiting Rule 等相關設定,是比較治本的做法。

Introduce to Cloudflare CAPTCHA and how to treat it.


Comments

Be the first to post a comment

Post a comment