我的部落格被某個印尼廣告商盯上,即使垃圾留言會被檢核機制阻擋,他還是孜孜不倦定期來貼不會有人看到的廣告留言,讓我很無言。過年前部落格換了 hCaptcha原以為可以改善,很不幸沒能阻止對方繼續徒勞無功...

貼文的留言區讀者俞俞丟了個關鍵字 - 2captcha,引導我認識有趣的產業 - 「在家解 CAPTCHA 賺錢 + 付費 CAPTCHA 破解服務」的線上媒合平台。

平台服務分成兩塊:「在家接任務解 CAPTCHA 賺外快」跟「付錢找人跳過 CAPTCHA 樂開懷」。需要破解 CAPTCHA 的客戶呼叫 API 上傳相關參數,平台自動將工作派發給在線上的 Worker (Worker,名符其實的「工人」智慧啊)解題,真人解答後上傳結果回覆給委託者。

由於是委託真人破解,理論上沒有解不掉的 CAPTCHA,而依 CAPTCHA 種類不同,耗費時間跟收費也不同,每 1000 次的價格從 USD 1 塊到 2.99 不等,等於一次不到台幣一毛塊(工人拿到的報酬只會更低,十足廉價勞工),耗時從 3 秒到 25 不等。reCaptcha、hCaptcha 是大宗:

Cloudflare Turnstile 也沒問題,1000 次 1.45 USD,耗時 22 秒:

至於我之前自製加減算數 CAPTCHA,平台有種上傳圖檔得到答案的玩法,所以即便是獨創的土砲版(像是我的加減法算數)也難逃被破解的命運,但至少對方得花時間看程式分析 CAPTCHA 圖檔及填寫位置,不像 reCaptcha、hCaptcha、Turnstile 有現成範例套用。

Normal captcha = new Normal();
captcha.SetFile("path/to/captcha.jpg");
captcha.SetNumeric(4);
captcha.SetMinLen(4);
captcha.SetMaxLen(20);
captcha.SetPhrase(true);
captcha.SetCaseSensitive(true);
captcha.SetCalc(false);
captcha.SetLang("en");
captcha.SetHintImg(new FileInfo("path/to/hint.jpg"));
captcha.SetHintText("Type red symbols only");

搞懂攻擊手法,該怎麼防守就有了頭緒,我已經想到一些反制手段(最少要製造麻煩,增加破解成本),過陣子找時間試試。


Comments

# by Denny

或許可以改用"中文"的問題

# by datoefi

用注音符號應該可用擋掉大部分的大陸人跟印度人

# by P

把題目用成大學聯考數學微積分題型好了,肯定有效 XD

# by Jeffrey

to Denny, datoefi, P, 在我的定義裡,CAPTCHA 目的在放行人類阻攔機器人,這裡的人類應儘可能涵蓋大部分的使用者,避免侷限於特定語言、地域、文化、教育程度... 才能算合格的 CAPTCHA,不然會違反 Completely Automated Public Turing test to tell Computers and Humans Apart 名稱定義的 Human。

# by anonymous

You must be fun at parties, Jeffery

# by Shane

針對主要客戶群體才懂的東西來製作鑑別,例如滷肉飯、小籠包、神木的照片。又例如題目核廢料,選文字蘭嶼。不是該地的人會很難回答。 針對宅宅的網站,就弄些宅宅的文化,例如EVA、鋼彈。

# by Any

Good

# by AK47TWN

https://forms.epicweb.dev/06

Post a comment