我們的客戶網站有各色各樣的 from (such as contact us form),每次 release 都很快會收到 spam, 真的有點多。第一時間想到 Captcha, 但因我們要照顧大陸的用戶, Recaptcha 這個 Google 的產品就不用考慮。

Ruby Toolbox 搜一下現在流行什麼方案,意外發現 honeypot-captcha, 覺得可以一試。

自己在 form 入面 generate 一個 textfield, 之後用 CSS position: absoluteleft: -9999px 把它隱藏起來,不用 display: none 是怕 Javascript detect :visible。tabindex 設定 -1,免被 tab 到。正常人不會看到,所以必定是 blank, server side 做 checking, 如果填了就很大機會是 spam。查看之前收到的 spam,robot 基本不理,見 field 必填,而且係亂填。安全起見所有 spam 都會 raise warning 去 rollbar 做記錄。

Release 到 production 之後發現的確有效,但有殺錯好人的情況,原因看來是 load 不到 CSS file... 所以看到那個 field, 填了... 雖然我們已用了 CDN 但就是有本事 load 不到,暈。為了保証用戶看不到那個 honeypot textfield,改成 inline CSS!觀察了幾日百發百中。