プロが教えるわが家の防犯対策術!

投稿時に入力するハンドル名、メールアドレス、URL、タイトル、投稿記事等から、NGワードを検索し、該当したら投稿を拒否する機能を持ったフリーの掲示板CGIスクリプトは無いでしょうか?

NGワードを登録し、それに該当する物が記事にあったら表示しない、といった掲示板は見た事はあるのですが、それをさらに発展させたような感じですかねぇ・・・

最近IPアドレスによる投稿拒否を行っても2,3日後にはプロキシ変えて投稿されるのを繰り返されて迷惑してます。
#ちなみに排除したいワードは「URL」でワンクリ詐欺サイトです・・・

どなたか知ってる方いらっしゃいましたらよろしくお願いいたします。

なお現在KENT WEBさんのyybbsを使用してます。
自分に改造する技術があれば・・・
技術的にはIPアドレスで弾いてるロジックはあるので、そこにNGワード検索でONなら飛ばすみたいな感じで行けるかなぁとか思ってるんですが・・・

A 回答 (4件)

私もyybbsを使用しているのですが、


最近はURLを羅列しただけの不正書き込みが目立つため、
「URLが三つ以上書き込まれたら拒否する」
というロジックを追加しました。
ご参照ください。
(「URLの自動リンク」がオンの場合です)

挿入場所:
sub auto_link {
という記述がある行のすぐ下

挿入ソース(4行):

my $num = ($_[0] =~ s/http/http/g);
if($num > 2){
&error("書き込みは拒否されました");
}

--------------
「http」という文字が3回以上書き込まれたら拒否のメッセージを表示する、という単純なものです。
この改造以降、今のところ不正書き込みは激減しています。
ご参考までに
    • good
    • 1

KENT WEBさんの「Web Forum」を使用している者です。


yocchan55さんと全く同じようなことで悩んでいたので、こちらのスレッドは大変役に立ちました。

phinexeさんの方法でうまくいきました。
メールアドレスやURL、ハンドル名などにも対応できて良いですね!
どうもありがとうございました。

同じことで困って参考にする方がいらっしゃるかもしれないので、わたしがやってうまくいった方法を補足しておきます。

「Web Forum」の場合、いじるのはwf_init.cgiです。

#----------------#
# 入力チェック #
#----------------#

の真上に

#----------------#
# NGワード設定 #
#----------------#
sub ngword {
open(FH,"./ng.cgi");
@Fdata = <FH>;
close(FH);
$rtrn = 0;

foreach $frch ( @Fdata ){
$frch =~ s/\n//g;
if ( $_[0] =~ /$frch/ ) {
$rtrn = 1;
}
}
return $rtrn;
}

を追加。

#----------------#
# 入力チェック #
#----------------#

の下にある

# 題名入力
if ($in{'sub'} eq "") { &error("「題名」の入力モレです"); }

の下に

# NGワードを判定
if(&ngword($in{'name'}) == 1|| &ngword($in{'message'}) == 1|| &ngword($in{'email'}) == 1 || &ngword($in{'url'}) == 1|| &ngword($in{'sub'}) == 1){
&error("投稿内容に不正な文字列が含まれています。");
}

を追加。

メモ帳などに
ひとつずつ改行しながら禁止したい文字を書いて
「ng.cgi」という名前でwf_init.cgiと同じ場所に保存。

変更したwf_init.cgiと、ng.cgiをアップロード。
ng.cgiのパーミッションはわからなかったので、755でアップロードしました。もっと的確なパーミッションがありそうなので知識のある方はつっこんでください。(^_^;
    • good
    • 0

ちょっと細かく説明します。


yyregi.cgiの371行目を見てください。
#-------------------------------------------------
# 入力確認
#-------------------------------------------------って書いてあります。
ソノ真上に、
sub ngword {
open(FH,"./ng.cgi");
@Fdata = <FH>;
close(FH);
$rtrn = 0;

foreach $frch ( @Fdata ){
$frch =~ s/\n//g;
if ( $_[0] =~ /$frch/ ) {
$rtrn = 1;
}
}
return $rtrn;
}

を入れてください。私が今さっき適当に作ったサブルーチンです。
その次、sub formCheck {ってのが、そのちょっと下にあるかと思います。
その、
> # 名前とコメントは必須
if ($in{'name'} eq "") { &error("名前が入力されていません"); }
if ($in{'comment'} eq "") { &error("コメントが入力されていません"); }
if ($in_email && $in{'email'} !~ /[\w\.\-]+\@[\w\.\-]+\.[a-zA-Z]{2,6}$/) {
&error("Eメールの入力内容が正しくありません");
}

ってヤツの下に、
if(&ngword($in{'name'}) == 1|| &ngword($in{'comment'}) == 1|| &ngword($in{'email'}) == 1 || &ngword($in{'url'}) == 1){
&error("NGワードにひっかかりました。");
}
これを入れて保存してください。
NGワード設定したい文字列を、ng.cgiというファイルに入れて、yyregi.cgiと同じファイルに入れて、
一行ずつ、NGワードに設定したいワードを入力して保存しておいてください。

ちなみに、改造する際、変なところ触ると、いっぱつで動かなくなるので注意してください。
それと、ヘタに、「死ね」とか入れると、違う言葉でもひっかけてしまうので、それなりに抑えたほうが良いです。
    • good
    • 0

最近やはり同じような被害にあってます。



いろいろ対策を考えなきゃなあと、いろいろ案を練ってます。
で、とりあえず『禁止文字』、『禁止URL』などで対応しています。

掲示板で2箇所に設定すれば良いので非常に簡単です。

詳しくは、
http://joho.boo.jp/memo/writer.cgi?mode=detail&n … を参照下さい。

参考URL:http://joho.boo.jp/
    • good
    • 0
この回答へのお礼

なるほど。改造といっても大掛かりにはならないのですね。
試してみる価値ありそうです。
勉強がてらソース解析しながらやってみます。

参考の方だとメッセージ中にNGワードがあった場合の改造ですが、
他にハンドル名、メールアドレス、タイトル、URL等も
NGワード指定出来るようにしてみたいですね。

お礼日時:2005/05/25 11:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!