這兒用到的一些變數, 在前文中有所描述, 請勿直接依照本文的內容修改, 而沒有依照前文的某些部份做修改, 否則... 那段程式碼可能會有問題.
首先, 修改 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 是怎麼通過檢查的再說吧.
跟以上的改好後, 如訪客發文沒有點選那個一欄位, 便出現以下的錯誤信息:-
Fatal error: Call to undefined function: debug_writelog() in /usr/home/user1xx/phpBB2/posting.php on line 558
請問怎樣解決.
把 debug_writelog 那幾行移除吧. 那是我除錯用的.
謝謝Tommy大大.
改好了一星期, bot發文的問題看來已經解決了.
但每天還是有好幾個bot註冊, 我自己嘗試了不選這"請選擇此欄位"或不填"確認代碼", 確實註冊不到的, 是否這已經被bot破解了.
請問還有甚麼辦法.
怎麼判斷是 bot 註冊, 而不是人來註冊?
我查了一下酷學園在 11 月的註冊資料, 有 300 多筆, 並沒有看到有類似 bot 註冊的情形.
我不能一確定是 bot 註冊, 但十多天以來, 每天還是會有幾個註冊, 他們的名字有共通點, 都是一堆英文+數字, 而所有註冊後都不會啟用的.
遲些會跟你的"PHPBB 之訪客發文請點我, part II" 再修改, 看看會否有改善.
THANKS!
版主大大
修改 posting_body.tpl, 找到下頭的字串: 與
修改 viewtopic_body.tpl, 找到下面的字串:
下方的文字沒辦法看到...
另外本 MOD 完整是三篇到 part II都要順序安裝嗎??
看不到那部份, 請改用 Firefox 或其它非 IE 核心的 browser 來看吧.
基本上, 只要改 Part II 那一篇的就可以了. 這篇的東西那兒應該都有包含.