【TIPS】phpbb3で英文スパム対策をする

スポンサーリンク

phpbb3を導入してしばらくすると、英文だけで書かれたスパムがけっこう頻繁にやってくるようになります。
対策としてゲストに対するCAPTCHAをONにしたりする方法もありますが、そうすると善意のゲストさんにもCAPTCHAを入力させることになるのでめんどくさい。スパムは出来るだけシステム(phpbb)側で対策したいので、色々調べてみました。phpbbのバージョンは3.0.9です。

1.AutoMOD + AntiSPAM-ACPというMODをインストールする→失敗

AntiSPAM-ACPはLithium Studios • View topic – Anti-Spam ACPから入手可能です。
AutoMODをインストールし、それからAntiSPAM-ACPのzipをアップロードは成功するのですが、そのあと.ModがACPに出てこないので設定が出来ないという(´∀`)

AutoMODでインストール後、AntiSPAM-ACPの詳細を見ると「インストール」とあるので、それをクリックすると修正適用後のzip?がダウンロードできるのですが、それをさらにどうすればいいのかがいまいちわからないという…
AutoMODで、この修正適用後のzipを指定してアップロードしても特に変化なし。wordpressみたいに即適用、とはいかないみたいです。

くじけずに色々いじっていたら、phpbb3のトップページのCSSが変になったみたいで壊れたので、バックアップから戻しましたorz

2.posting.phpに以下のコードを追加する

posting.phpの220~221行目あたりに以下のコードがあるので

// Permission to do the action asked?
$is_authed = false;

の下に以下のコードを追加して保存すればOKです。

    $chkmsg = ( !empty($_POST['message']) ) ? $_POST['message'] : '';
    //英語のみ禁止チェック
    $chkresult =((mb_detect_encoding($chkmsg, "auto") == 'ASCII')&&(strlen($chkmsg) != 0));

    //禁止ワードを"chkword.txt"から読み込む
    $chkword = @file("./chkword.txt");
    foreach ($chkword as $line) {
    $line = str_replace("\r", "" , $line);
    $line = str_replace("\n", "" , $line);
    if (substr_count($chkmsg, $line)) { $chkresult = true; }
    }
    if ($chkresult) {
		trigger_error('日本語が含まれていない返信は投稿できません。<br />または投稿禁止ワードが含まれています');
	}

こちらのphpbb-禁止ワード設定と英語のみ禁止でspam投稿対策 – 検索プログラマのメモ帳を元に修正しました。
追加コードの行の位置はYSK.ME BLOG » スパム対策のブログを参考にさせてもらいました。ありがとうございます。

その後の作業は
・posting.phpが置いてあるのと同じディレクトリに、chkword.txtを作成する
・chkword.txtに1行に1単語ずつ、投稿禁止ワードを書き込んで保存
という感じで。エラーメッセージが文字化けする場合はposting.phpの文字コードが元はASCIIで日本語が変になるので、UTF-8が扱えるテキストエディタでUTF-8に文字コードを変換すると文字化けがなおりました。

結論
・phpbb3をいじる時は、ローカルにテスト環境を作ってそれをいじってからサーバにアップロードする
・検索しても情報が古いと、phpbb3には適用できないことが多い気がする。

拡張(mod)の使い方や、最低限のスパム対策が簡単に出来たらphpbb3は使いやすい気がします、機能も豊富だし。