Tommy 碎碎念

Tommy Wu's blog

« 上一篇 | 下一篇 »

PHPBB 之訪客發文請點我....
post by tommy @ 19 九月, 2006 14:03
這篇主要是之前的 "討厭的廣告 bot, 別再來我的 phpBB 了...." 的延伸. 利用新增的一個 checkbox 欄位, 要求使用訪客身份發文時, 必須點選該欄位才允許發文. 對於一些專對  PHPBB 所寫的 bot 來說, 應該會有一定的效用.

這兒用到的一些變數, 在前文中有所描述, 請勿直接依照本文的內容修改, 而沒有依照前文的某些部份做修改, 否則... 那段程式碼可能會有問題.

首先, 修改 lang_main.php , 把之前所加上的那兩段語言定義修改一下, 原本為:

$lang['ANTISPAM_Check'] = '在註冊時請選擇此欄位';
$lang['ANTISPAM_Check_Error'] = '[在註冊時請選擇此欄位] 這個欄位未選擇';

改成:

$lang['ANTISPAM_Check'] = '請選擇此欄位';
$lang['ANTISPAM_Check_Error'] = '[請選擇此欄位] 這個欄位未選擇';

讓原本給註冊專用的訊息也能在這兒使用.

修改 posting_body.tpl, 找到下頭的字串:

		<td class="row2"><span class="genmed"><input type="text" class="post" tabindex="1" name="username" size="25" maxlength="25" value="{USERNAME}" /></span></td> 

改成:

		<td class="row2"><span class="genmed"><input type="text" class="post" tabindex="1" name="username" size="25" maxlength="25" value="{USERNAME}" />
<!-- add by twu2 20060919 begin -->
<input type="checkbox" name="check_{HCODE}" />{L_ANTISPAM_CHECK}
<!-- add by twu2 20060919 end -->
</span></td>

修改 posting.php, 找到下頭的字串:

 	'HCODE' => md5($userdata['username'] . $userdata['user_regdate']),
'HCODENAME' => md5($userdata['username'] . $hcode_date . ANTISPAM),
'DATE' => $hcode_date, 

在後頭加上一段, 變成:

 	'HCODE' => md5($userdata['username'] . $userdata['user_regdate']),
'HCODENAME' => md5($userdata['username'] . $hcode_date . ANTISPAM),
'DATE' => $hcode_date,
'L_ANTISPAM_CHECK' => $lang['ANTISPAM_Check'], 

找到下頭的字串:

 			if (!isset($hcode) || empty($hcode) || $hcode != $hcode_old) {
//debug_writelog("antispam for ".$userdata['user_id'].", ".$userdata['username']);
message_die(GENERAL_MESSAGE, $lang['ANTISPAM_Error']);

在後頭加上一段, 變成:

 			if (!isset($hcode) || empty($hcode) || $hcode != $hcode_old) {
//debug_writelog("antispam for ".$userdata['user_id'].", ".$userdata['username']);
message_die(GENERAL_MESSAGE, $lang['ANTISPAM_Error']);
}

if (($username != '' || $userdata['user_id'] == ANONYMOUS) &&
!isset($HTTP_POST_VARS['check_'.$hcode]) ) {
//debug_writelog("antispam 1 for ".$userdata['user_id'].", ".$username);
$error_msg = $lang['ANTISPAM_Check_Error'];
}
else 

這樣子就可以在訪客發文時, 檢查是否有點選那個非一般 PHPBB 使用的欄位, 來避免那些專對 PHPBB 所寫的 bot 使用訪客的身份來發文了.

如果有使用 QuickReply 的模組, 還要修改下頭的檔案.

修改 viewtopic_body.tpl, 找到下面的字串:

      <span class='genmed'><input type='text' class='post' tabindex='1' name='username' size='25' maxlength='25' value='' /></span><br /> 

改成:

      <span class='genmed'><input type='text' class='post' tabindex='1' name='username' size='25' maxlength='25' value='' />
<!-- add by twu2 20060419 begin -->
<input type="checkbox" name="check_{HCODE}" />{L_ANTISPAM_CHECK}
<!-- add by twu2 20060419 end -->
</span><br /> 

修改 viewtopic.php, 找到下頭的字串:

         'HCODE' => md5($userdata['username'] . $userdata['user_regdate']),
'HCODENAME' => md5($userdata['username'] . $hcode_date . ANTISPAM),
'DATE' => $hcode_date, 

在後頭加上一段, 變成:

         'HCODE' => md5($userdata['username'] . $userdata['user_regdate']),
'HCODENAME' => md5($userdata['username'] . $hcode_date . ANTISPAM),
'DATE' => $hcode_date,
'L_ANTISPAM_CHECK' => $lang['ANTISPAM_Check'], 

這樣子就可以了.


2006/10/29: 今天發現似乎有防客上來發廣告信, 看起來像是一個 bot (到目前為止唯一通過的廣告文章), 不知道是如何通過這個檢查的. 目前是先在訪客發文時, 加上一些記錄, 觀察一下這個 bot 是怎麼通過檢查的再說吧.

 

Del.icio.us Furl HEMiDEMi Technorati MyShare
commons icon [1] about PHPBB 之訪客發文 [ 回覆 ]

跟以上的改好後, 如訪客發文沒有點選那個一欄位, 便出現以下的錯誤信息:-

Fatal error: Call to undefined function: debug_writelog() in /usr/home/user1xx/phpBB2/posting.php on line 558

請問怎樣解決.

commons icon [2] [ 回覆 ]

把 debug_writelog 那幾行移除吧. 那是我除錯用的.

commons icon [3] [ 回覆 ]

謝謝Tommy大大.
改好了一星期, bot發文的問題看來已經解決了.
但每天還是有好幾個bot註冊, 我自己嘗試了不選這"請選擇此欄位"或不填"確認代碼", 確實註冊不到的, 是否這已經被bot破解了.
請問還有甚麼辦法.

commons icon [4] [ 回覆 ]

怎麼判斷是 bot 註冊, 而不是人來註冊?
我查了一下酷學園在 11 月的註冊資料, 有 300 多筆, 並沒有看到有類似 bot 註冊的情形.

commons icon [5] [ 回覆 ]

我不能一確定是 bot 註冊, 但十多天以來, 每天還是會有幾個註冊, 他們的名字有共通點, 都是一堆英文+數字, 而所有註冊後都不會啟用的.
遲些會跟你的"PHPBB 之訪客發文請點我, part II" 再修改, 看看會否有改善.
THANKS!

commons icon [6] Re:PHPBB 之訪客發文請點我.... [ 回覆 ]

版主大大
修改 posting_body.tpl, 找到下頭的字串: 與
修改 viewtopic_body.tpl, 找到下面的字串:

下方的文字沒辦法看到...
另外本 MOD 完整是三篇到 part II都要順序安裝嗎??

commons icon [7] Re:PHPBB 之訪客發文請點我.... [ 回覆 ]

看不到那部份, 請改用 Firefox 或其它非 IE 核心的 browser 來看吧.
基本上, 只要改 Part II 那一篇的就可以了. 這篇的東西那兒應該都有包含.

迴響
暱稱:
標題:
個人網頁:
電子郵件:
迴響

  

Bad Behavior 已經阻擋了 89 個過去 7 天試圖闖關的垃圾迴響與引用。
Power by LifeType. Template design by JamesHuang. Valid XHTML and CSS