Blogn(ぶろぐん)のスパム対策は IP アドレスではじくしか方法がありません。
それだけでは心許ないのでコメントに対して禁止ワードを設定できるように改造してみました。
URL またはコメント欄に禁止ワードが含まれていた場合、コメント欄に「コメントに禁止ワードが含まれていたため、表示が規制されました」と表示します。同時に URL も空欄にします。
禁止ワードは「ngwd.dat」というファイルで設定します。
コメント欄に禁止ワードが見つかった場合、コメントはあらかじめ決められた文字列に置換。スパマーのアドレスも空欄にする。
名前 = Party Poker
URL = http://www.●●●.com/
コメント = You are invited to check out some information about party poker http://www.●●●.com/
↓
名前 = Party Poker
URL =
コメント = コメントに禁止ワードが含まれていたため、表示が規制されました。
URL欄に禁止ワードが見つかった場合も上と同じ動作。
名前 = Party Poker
URL = http://www.poker-●●●.com/
コメント = You are invited to check out some information.
↓
名前 = Party Poker
URL =
コメント = コメントに禁止ワードが含まれていたため、表示が規制されました。
大文字・小文字だろうが区別なく規制できます。
名前 = Party Poker
URL = http://www.●●●.com/
コメント = You are invited to check out some information about PARTY POKER http://www.●●●.com/
↓
名前 = Party Poker
URL =
コメント = コメントに禁止ワードが含まれていたため、表示が規制されました。
index.php 内の981〜988行目の下に赤い文字の部分を追加
//テキスト整形
$c_name = CleanStr($c_name);
$c_email = CleanStr($c_email);
$c_url = CleanStr($c_url);
$c_mes = CleanStr($c_mes);
if (CSIZEMAX) $c_mes = mbtrim($c_mes,CSIZEMAX);
// 改行文字の統一。
$c_mes = rntobr($c_mes);
// 使用禁止ワード
$c_message = strtolower($c_mes);
$data = fopen(LOGDIR."ngwd.dat", "r");
$deny = fgets($data, 1024);
$ng_word = explode(",", $deny);
if (is_array($ng_word)) {
foreach ($ng_word as $deny_wd) {
if (preg_match("/$deny_wd/", $c_message) || preg_match("/$deny_wd/", $c_url)) {
$c_mes = "コメントに禁止ワードが含まれていたため、表示が規制されました。";
$c_url = NULL;
}
}
}
fclose($data);
テキストファイルに禁止ワードを羅列する。
このファイルを「ngwd.dat」という名前で保存し、Blogn がインストールされているディレクトリ下の「log」ディレクトリにアップロードする。
設定ファイルはこんな感じ(↓)
casino,poker,viagra,texas,ランキング
注意事項
禁止ワードは「URL」と「コメント」欄の中身に対して有効です。はじきたいサイトのアドレスの一部を入れると良いでしょう。
上の改造例では規制にひっかかった場合「コメントに禁止ワードが含まれていたため、表示が規制されました。」と表示されますが、好きな文字列にする事が可能です。下記の緑色の部分を書き換えてください。
$c_mes = "コメントに禁止ワードが含まれていたため、表示が規制されました。";
もし書込み自体させたくない場合は、以下のように記述すれば OK。
変更箇所は青字の部分だけ。
//テキスト整形
$c_name = CleanStr($c_name);
$c_email = CleanStr($c_email);
$c_url = CleanStr($c_url);
$c_mes = CleanStr($c_mes);
if (CSIZEMAX) $c_mes = mbtrim($c_mes,CSIZEMAX);
// 改行文字の統一。
$c_mes = rntobr($c_mes);
// 使用禁止ワード
$c_message = strtolower($c_mes);
$data = fopen(LOGDIR."ngwd.dat", "r");
$deny = fgets($data, 1024);
$ng_word = explode(",", $deny);
if (is_array($ng_word)) {
foreach ($ng_word as $deny_wd) {
if (preg_match("/$deny_wd/", $c_message) || preg_match("/$deny_wd/", $c_url)) {
return 1;
}
}
}
fclose($data);
「コメントが投稿できませんでした。サイト管理人へディレクトリのパーミッションを確認してください。」と表示されます。
コメントと URL だけではなく、投稿者の名前とメールアドレスにも禁止ワードで規制したい場合は
if (preg_match("/$deny_wd/", $c_message) || preg_match("/$deny_wd/", $c_url)) {
を以下のように記述してください(↓改行されていますが、実際は1行です)。
if (preg_match("/$deny_wd/", $c_message) || preg_match("/$deny_wd/", $c_url) || preg_match("/$deny_wd/", $c_name) || preg_match("/$deny_wd/", $c_email)) {