栗子現場直播 千篇一栗
有很多簡單的道理,若不是被遺忘,不是察覺不到,就是知易行難。

2011年4月9日 星期六

OWT Ad bot Stage2

  今晚,bot又出現了,可喜可賀。這代表了我的對手已具有一定的實力。

  由於之前做的白痴防線被打破,所以今天再把防線更新了。上次是考驗對手掃描HTML的能力,今次是考驗對手解讀JavaScript的能力。
  上次說過,為了阻擋bot的來襲,我把會員申請表格加上一個無聊的隱形項目。今次我也加了一個新的隱形項目,但和上次有點不同。不同之處,是我用JavaScript放了一條數學問題進去。
  如果申請者是真人,他通常會使用Internet Explorer/Firefox/Chrome等的瀏覽器進入我站。而這些瀏覽器碰到我的JavaScript數學題,就會自動進行計算,並自動在表格上填上答案。我網站看到答案正確,就會正常放行。
  但如果申請者是bot,就會使用專門的軟件進入我站。如果那些軟件看不懂JavaScript,那個隱形項目就會填空,被我網站發現,再作處理。

  以上只是整個防線的其中一個部份。
  今次防線還有一個巧妙之處,是加入了一個小陷阱。我網站即使發現新會員是bot,還是會讓他加入,但會引導對方到一個與世隔絕的假區域。雖然他還能在裡面發文和放廣告,但由於與世隔絕,所以不會被其他正常會員看到,更不會影響到討論區的日常運作,而且會被我們輕易發現。這個方法稱為Honeypot。
  這個方法有多個好處。第一是bot很難發現自己中陷阱,廣告商不會發現問題而把bot改良。第二是可以讓我更清楚bot的性質。如果沒有新會員中陷阱,正常區卻繼續出現廣告文,就代表對方從一開始就已經突破了我的防線,那些辨別bot的方法沒有用。如果先有bot中陷阱,數日後正常區又出現廣告文,就代表bot會進化,對方有花時間去攻破我的防線。

  例行說說,那隱形項目的數學問題,涉及到二進制XOR,以及UVA-100。我不打算在這個地方說太多。
  如果 Stage2 被打破,Stage3 將會使用 external Javascipt file,而 Stage4 會使用 Flash-JavaScript。以上的方法都不需要新會員做多餘的動作。但如果事情還是不能解決,到最後我可能會強迫新會員在登記時先玩一次 owata。

2 則留言:

J---- W- 提到...

仲有一招係真人申請,再由bot登入放廣告。
除非登入再做手腳,例如顯示算式同javascript入面寫果個唔同,唔放心既再加埋cookie一齊玩兩套checking昇東擊西,咁即使bot可以讀到javascript都係計錯數啦!

栗子捌貳 提到...

我自己寫過你這樣的bot去炸自己的phpbb,發現對付phpbb的bot必須要懂得用cookies。簡單來說,單純使用cookies並不能block到bot。