為什麼每個網站都跳出 CAPTCHA?成因與解決方法

一直遇到 CAPTCHA,幾乎都能追溯到網路路徑、瀏覽器設定,或兩者彼此矛盾。依常見程度列出成因,並附上對應的解法。
不斷出現 CAPTCHA,通常只代表一件事:你連上網站的方式看起來像機器,或像一群人共用同一扇門,於是網站提高了進入的門檻,直到取得更明確的訊號為止。驗證只是症狀,成因藏在你的網路路徑、你的瀏覽器設定,或是這兩者向網站述說了不同的故事。
請依下列順序逐一排查。前三項遠比其他原因常見,而且都出在同一個地方:你的流量所來自的位址。
先從位址查起,因為通常就是它
位址是共用的,或有過不良紀錄
多數連線並不會給你專屬的位址。行動網路業者和許多家用寬頻業者,會讓大量用戶躲在一小批公開位址後面。辦公室、校園與共享辦公空間也是如此。這個位址背後的任何人今天早上做了什麼,你下午就得跟著承受。
廉價的代理池更是如此,而且勝算更低。共用的住宅代理池會把同一個位址租給當下任何購買的人,如果網站稍早曾在該位址看到一波登入嘗試,對下一次來自它的連線自然會格外謹慎。
解法是先弄清楚自己實際呈現的位址是什麼,然後親自測試,而不是相信賣家的說明。在 PowerOps 中,代理會先加入代理庫並完成測試,才會用到任何帳號上,測試結果會回報實際觀察到的位址。如果發現路徑是共用的,就把設定檔換到不共用的路徑上。
它是資料中心位址
屬於主機代管業者的位址範圍是公開、有編目、而且很容易查到的。資料中心位址本身沒有問題,許多正常流量也來自這類位址。但對於已登入的一般消費者帳號來說,從這裡連線並不常見,網站也會據此給予相應的權重。
解法是把資料中心位址留給不需要個人登入的工作,帳號工作階段則使用住宅或行動網路位址。成本會上升,阻力會下降,整個取捨就在這裡。
你使用的是人人都在用的 VPN 出口
一般消費型 VPN 會把大量使用者集中到少數幾個出口位址。這正是產品設計的運作方式,也是為什麼躲在其中的工作階段會遇到其他地方遇不到的驗證。並不是你做了什麼讓這個位址受到審視,而是龐大的流量本身造成的。
解法是為每個設定檔配置專屬路徑,並向提供固定位址的業者購買。如果你因為其他用途需要 VPN,請不要讓它出現在處理帳號工作的機器或設定檔上,也絕不要把它疊在代理之上。
位址在工作階段中途改變
輪換式端點會在每次請求或每隔一段時間給你一個新位址。這對收集公開資料很有用,但對已登入的工作階段來說,卻是你自己製造的麻煩。一個工作階段從某個城市開始,幾分鐘後又從另一個城市繼續,描述的是沒有任何人類會做出的行為。
這種成因有明顯的特徵:最初幾分鐘一切正常,接著每次換頁都出現驗證,中途往往還會突然被登出。
解法是把端點切換成固定或工作階段持續模式,保留時間要比你的工作時段更長。請在第一次登入之前就指派好路徑,因為第一次工作階段會為該帳號建立「正常」的基準。
接著檢查瀏覽器講的故事是否一致
時區、語言與位址互相矛盾
一個經由法蘭克福連線的設定檔,卻回報洛杉磯時區,等於用兩種方式回答了同一個問題。同樣地,呈現巴西位址、瀏覽器語言清單卻只有越南文,也是如此。單獨來看,這些值都不特別,但合在一起,就是網站最容易檢查的矛盾。
解法是讓設定檔的時區與語言清單與路徑所在的國家一致,並且在每次更換路徑後一併檢查。這是清單上最常見、由自己造成的原因,而且大約十秒鐘就能修正。
請求節奏看起來像自動化
頁面以剛好四秒的間隔載入。表單瞬間填完,中間沒有任何焦點事件。瀏覽時完全沒有捲動。十幾個設定檔在同一秒、從同一個子網路做完全相同的事。這些都不是被禁止的,但全都不尋常,而不尋常正是提高進入門檻的原因。
解法是控制節奏。錯開設定檔的啟動時間,而不是一次全部啟動。為腳本工作加入隨機的延遲,讓頁面穩定後再執行下一個動作。把批次拆小。如果腳本在網站間移動的速度比人快,網站有權問對面到底是誰。
然後看看瀏覽器保留了什麼、封鎖了什麼
Cookie 過期、遺失,或每晚被清掉
多數驗證會記錄自己的結果。通過一次後,網站會儲存一筆資料,表示這個瀏覽器已經回答過了,之後一段時間就不會再出現驗證。如果你每次結束都清除 Cookie、使用無痕視窗瀏覽,或每次都建立全新的暫時設定檔,這筆紀錄就會在每次工作階段結束時被丟棄,下次造訪又得從頭開始。
解法是使用擁有專屬持久目錄的設定檔,並且正常關閉,讓狀態確實寫入。工作階段中途被強制結束的設定檔,可能連剛剛賺到的那筆紀錄都會遺失。
有東西封鎖了驗證所需的腳本
驗證是以腳本形式執行的,通常從屬於安全服務供應商的網域載入,而不是你造訪的網站。強力的內容封鎖器、腳本封鎖器、強化隱私的擴充功能,以及停用第三方儲存空間,都可能讓載入失敗。驗證永遠無法完成,於是不斷重試。從你這邊看來,就像是無限迴圈,或是一個一直轉圈卻永遠不會結束的驗證框。
請依序處理:
- 在完全沒有擴充功能的設定檔中開啟同一個頁面。如果迴圈消失,原因就是某個擴充功能。
- 逐一重新啟用擴充功能,直到問題再次出現。內容封鎖器與隱私強化工具是最常見的元凶。
- 在封鎖它的工具中允許驗證服務商的網域,而不是整個關閉封鎖器。
- 確認該網站沒有停用 JavaScript 與第三方儲存空間。
- 檢查系統時鐘。時鐘相差幾分鐘就會破壞驗證所依賴的簽章權杖,而且這種失敗看起來完全不像時鐘問題。
從症狀對應到成因
把你看到的情況與左欄對照,再從右欄的解法開始嘗試。
| 你看到的情況 | 最可能的成因 | 先嘗試的做法 |
|---|---|---|
| 每個網站、每個設定檔,從第一個請求就出現驗證 | 位址本身:共用、繁忙,或屬於資料中心位址空間 | 測試路徑,並查出該位址的歸屬 |
| 只有一個設定檔受影響,其他都正常 | 該設定檔的路徑,或其儲存的狀態 | 先換成確定良好的路徑,再改其他設定 |
| 前幾分鐘正常,之後每次換頁都出現驗證 | 輪換式端點在工作階段中途改變位址 | 將端點切換成保留時間較長的固定模式 |
| 通過驗證後,同樣的驗證立刻又出現 | 通過紀錄沒有被儲存,或必要的腳本被封鎖 | 停止在結束時清除 Cookie,然後關閉擴充功能再試一次 |
| 驗證框一直轉圈,永遠無法完成 | 封鎖器阻止驗證腳本載入 | 允許該服務商的網域,然後檢查系統時鐘 |
| 登入前網站就以錯誤的語言載入 | 地區設定與路徑不一致 | 讓設定檔的語言與時區符合路徑所在的國家 |
| 剛更換代理就開始發生 | 新端點本身的不良紀錄 | 測試該端點,並請供應商提供另一個 |
| 剛好在擴充功能更新後開始發生 | 該擴充功能 | 在該網站停用它,然後重新載入 |
不要這樣做
有幾種反射動作一定會讓情況更糟。
- 不要為了擺脫驗證而隨機更換設定檔的身分。每次造訪都變成不同的裝置,是比你原本擔心的任何事都更響亮的訊號,還會丟掉你先前通過每次驗證所留下的證據。
- 不要一開始就清除 Cookie。那些 Cookie 正是你通過驗證的紀錄,清掉它們就保證下次造訪要從零開始。
- 不要把 VPN 疊在代理之上。兩條路徑會對你的所在位置各說各話,再加上額外的延遲,連正常的時間特徵都會顯得怪異。
- 不要瘋狂重新整理。同一位址反覆失敗的嘗試,正是驗證要測量的行為。
- 不要在工作階段中途把帳號移到全新的路徑。先結束工作階段,再更換路徑,然後重新登入。
還有一件我們不會協助的事。自動解開這些驗證不在 PowerOps 的範圍內,也超出本部落格願意說明的範圍。市面上確實有販售這類服務,但我們不整合、不寫文件,產品中的任何功能也都不是為了繞過安全驗證而設計。上述一切都是在消除網站一開始就要詢問你的理由。代替你回答問題是另一門生意,我們不做這個。
如果都沒有用
有時候,驗證與你完全無關。遭受攻擊的網站會對所有人提高門檻,整個國家的流量可能會在一兩天內被套用更嚴格的規則。在花一整個下午處理之前,請先用沒有代理、也沒有設定檔的一般連線載入同一個頁面。如果驗證同樣在那裡等著你,答案就是等待。
其餘時候,問題都歸結為一份簡短的清單:一條有不良紀錄的路徑、一條無法保持穩定的路徑、彼此矛盾的值,以及一個留不住自己所賺得紀錄的瀏覽器。把這四點修好,驗證就會回到偶爾出現的小麻煩,而不再是你工作日的常態。


