PHPWind 論壇常遭遇註冊機批量註冊並發布垃圾廣告。本文整理五種實測有效的防禦手段,從簡單到深度修改,管理員可根據技術能力選擇。
原理:註冊機通常針對預設欄位名(username、password、email 等)自動填寫。將前端表單 name 屬性與後端資料庫欄位同步改名,即可讓機器人「找不到門」。
步驟:
register.htm 模板,將所有 input name="..." 改為自定義名稱(如 reg_user、reg_pwd)。register.php 對應的 $_POST 變數名稱。pw_members 欄位名(或在寫入前做映射)。優點:機器人完全失效。缺點:升級/安裝外掛時需重新修改,維護成本高。
原理:在註冊表單加入一道人類易答、機器難答的問題(如「你媽去年 49 歲,今年幾歲?」)。
實作:
<!-- register.htm 新增 -->
<tr>
<td class="f_one" width="21%">防惡意註冊問題:<br><font color="#000000">你媽去年49歲,今年幾歲?</font></td>
<td class="f_one"><input type="text" name="manianling" size="4" maxlength="4"> 請填入數字</td>
</tr>
<?php
// register.php 寫入資料庫前驗證
if ($manianling != 50) {
Showmsg("老媽幾歲都不關心的人,去死吧!!", "javascript:history.back()");
}
?>
變體:可改為「今天幾號」(需在 PHP 端計算 gmdate('d')),或自定義問題庫隨機抽取。
將 register.php 改名為 welcome.php 等,並全站搜尋替換所有連結(login.php、global.php、所有模板 .htm 檔)。
缺點:升級極度麻煩,外掛安裝失效,不建議長期使用。
修改四個檔案,在後台設定自定義驗證碼字串(如「phpwind」),前端註冊時必須填入相同字串。
template/admin/settings.htm:新增設定欄位 reg[autoreg]。admin/settings.php:處理提交,去除空白 $reg['autoreg'] = str_replace(' ', '', trim($reg['autoreg']));。template/wind/register.htm:判斷 $rg_autoreg 非空時顯示輸入框。register.php:驗證 if ($rg_autoreg != '' && $autoreg != $rg_autoreg) showmsg('驗證未通過!');。優點:後台可隨時開關/更改答案,升級僅需重新套用修改。
許多機器人「先註冊、後潛伏、定時發帖」。定期查詢 pw_members 找出註冊後從未發文、或用戶名符合特徵(如「利劍*」)的帳號並批次刪除。
| 方案 | 難度 | 維護性 | 推薦指數 |
|---|---|---|---|
| 修改欄位名 | 高 | 低 | ★★☆☆☆ |
| 問答驗證 | 低 | 中 | ★★★★☆ |
| 改檔名 | 低 | 極低 | ★☆☆☆☆ |
| 後台驗證碼設定 | 中 | 高 | ★★★★★ |
| 清理殭屍帳號 | 低 | 高 | ★★★★☆ |
最佳組合:啟用「後台驗證碼」+「隨機問答庫」+「定期清理殭屍帳號」,即可以最低成本擋下 99% 機器人。