ホーム > Yomi-Search | ヘルプページ

YomiSearch::SpamRegistCheck [スパム登録制限機能]

動作環境

Yomi-Search Ver4.21に対応しています。

主な機能/特徴

  1. 同一IPからの連続登録を制限します。※設定項目で変更可能
  2. 新規登録画面を通さない登録(自動登録ソフト等)をブロックします。
  3. 新規登録フォームへ入力支援をするソフトはブロックできません。※同一IPによる連続登録の制限は可能です。

プログラムのダウンロード

以下の圧縮ファイルをダウンロードしてください。
SpamRegistCheck.lzh Ver1.02(2005/06/28)

ファイル構成

regist_ys.cgi登録用プログラム(修正)[705]
YomiSearch/SpamRegistCheck.pm(追加)[変更の必要なし]
YomiSearch/md5_mini.pl(追加)[変更の必要なし]
YomiSearch/index.htmlダミーファイル(追加)[変更の必要なし]
template/regist_new.html新規登録画面のテンプレートファイル(修正)[606]
template/regist_new_preview.html新規登録プレビュー画面のテンプレートファイル(修正)[606]
log/SpamRegistCheck.cgi連続登録のチェック用データファイル(追加)[606]
※[]内はパーミッションの設定値。suExec環境の場合には705->700,606->600

設定項目の説明

YomiSearch/SpamRegistCheck.pm の8行目〜が設定項目になっています。

my $LIMIT_TIME=3600;

新規登録画面を開いた時から登録が完了するまでの有効時間(秒)を設定します。この時間を超えるとタイムアウトとなり登録者は新規登録画面から登録し直す必要があります。

my $LIMIT_SAME_IP=2;

$LIMIT_TIMEで設定した時間内に同一IPによっていくつまでの登録を許可するかを設定します

my $MD5_LIB_PATH="YomiSearch/md5_mini.pl";

md5_mini.plのパスを設定します。通常は修正する必要はありません

my $USE_Digest_MD5=0;

Digest::MD5モジュールを使用する場合には 1 にしてください。Digest::MD5がインストールされているサーバでは使用したほうが処理が速くなります。

導入方法

改造していないYomi-Searchにこの機能を適用する場合には、
設定項目を設定後、ファイル構成にあるファイルを配布されているものに上書き又は追加し、パーミションの設定をすれば完了です。

改造している場合には下記の修正箇所を直接変更してみてください。

修正箇所

新規に追加されるファイルは
YomiSearch/SpamRegistCheck.pm
YomiSearch/md5_mini.pl
YomiSearch/index.html
log/SpamRegistCheck.cgi

修正が必要なファイルは
regist_ys.cgi
template/regist_new.html
template/regist_new_preview.html
です。

修正箇所は<!-- add SpamRegistCheck --><!-- /add SpamRegistCheck -->
又は、#<!-- add SpamRegistCheck -->#<!-- /add SpamRegistCheck -->
で囲まれています。

regist_ys.cgi

[regist_ys.cgi](5箇所修正)
★1: 1380行目付近 mes関数内のフォーム入力値に

<!-- add SpamRegistCheck -->
<input type=hidden name=spam_chk_code value="$FORM{spam_chk_code}">
<input type=hidden name=spam_chk_time value="$FORM{spam_chk_time}">
<!-- /add SpamRegistCheck -->

を追加。

★2: 762行目付近の
@hyouji_log=@Slog;

if($EST{user_check} && $FORM{changer} ne "admin" && $FORM{mode} eq "act_regist"){ #<仮登録時>
の間に

#<!-- add SpamRegistCheck -->
if($FORM{'changer'} ne "admin"){
#登録成功時に連続登録のチェック用データファイルにデータを追加しファイルを更新
#戻り値:更新成功=OK/更新失敗="エラーメッセージ")
$result=$SpamRegistCheck_obj->add_file(time=>$FORM{spam_chk_time},check_code=>$FORM{spam_chk_code});
}
#<!-- /add SpamRegistCheck -->
を追加。

★3: 751行目付近 ✓ 〜 &lock; の間に

#<!-- add SpamRegistCheck -->
my ($SpamRegistCheck_obj,$result);
if($FORM{'changer'} ne "admin"){
#スパム登録チェックのオブジェクトの作成
$SpamRegistCheck_obj=YomiSearch::SpamRegistCheck->new(logfile=>"$EST{log_path}SpamRegistCheck.cgi");
#time値と認証用文字列との妥当性をチェック
#戻り値:認証成功=OK/認証失敗=NG/有効時間を超えている=TIMEOUT
my $result=$SpamRegistCheck_obj->check(salt=>substr($EST{pass},-2),
time=>$FORM{spam_chk_time},check_code=>$FORM{spam_chk_code});
if($result eq "NG"){&mes("データの照合に失敗しました。新規登録画面から登録をやり直してください。","データ照合エラー","regist_ys.cgi?mode=new");}
elsif($result eq "TIMEOUT"){&mes("登録画面の有効期限切れです。新規登録画面から登録をやり直してください。","データ照合エラー","regist_ys.cgi?mode=new");}
#同一IPからの連続登録チェック
#戻り値:許容重複数を(超えていない=OK/超えている=NG/ログファイルの読み込みエラー=FILE_READ_ERROR)
$result=$SpamRegistCheck_obj->ip_check(check_code=>$FORM{spam_chk_code});
if($result eq "NG"){&mes("一定時間内の同一IPによる登録数の制限を越えました。しばらくしてから登録をやり直してください。","登録数の制限エラー","regist_ys.cgi?mode=new");}
elsif($result eq "FILE_READ_ERROR"){&mes("$SpamRegistCheck_obj->{logfile}の読み込みに失敗しました。","ファイルの読み込みエラー","regist_ys.cgi?mode=new");}
}
#<!-- /add SpamRegistCheck -->

を追加。

★4: 165行目付近の
else{

print "Content-type: text/html\n\n";
require "$EST{temp_path}regist_new.html";
の間に

#<!-- add SpamRegistCheck -->
#スパム登録チェックのオブジェクトの作成
my $SpamRegistCheck_obj=YomiSearch::SpamRegistCheck->new(logfile=>"$EST{log_path}SpamRegistCheck.cgi");
if($FORM{spam_chk_time} && $FORM{spam_chk_code}){ #time値とハッシュ値の照合を行う
#time値と認証用文字列との妥当性をチェック
#戻り値:認証成功=OK/認証失敗=NG/有効時間を超えている=TIMEOUT
my $result=$SpamRegistCheck_obj->check(salt=>substr($EST{pass},-2),
time=>$FORM{spam_chk_time},check_code=>$FORM{spam_chk_code});
if($result eq "NG"){&mes("データの照合に失敗しました。新規登録画面から登録をやり直してください。","データ照合エラー","regist_ys.cgi?mode=new");}
elsif($result eq "TIMEOUT"){&mes("登録画面の有効期限切れです。新規登録画面から登録をやり直してください。","データ照合エラー","regist_ys.cgi?mode=new");}

}
else{ #mode,ktフィールド以外は無効にする
%FORM=(mode=>$FORM{mode},kt=>$FORM{kt});
#認証用文字列を生成
$FORM{spam_chk_time}=time();
$FORM{spam_chk_code}=$SpamRegistCheck_obj->make_check_code(salt=>substr($EST{pass},-2),time=>$FORM{spam_chk_time});
}
#<!-- /add SpamRegistCheck -->

を追加。

★5: ファイルの先頭 8行目付近に

#<!-- add SpamRegistCheck -->
require YomiSearch::SpamRegistCheck;
#<!-- /add SpamRegistCheck -->

を追加。

template/regist_new.html

[template/regist_new.html](1箇所修正)
★1: <form>〜</form>内 65行目付近に

<!-- add SpamRegistCheck -->
<input type=hidden name=spam_chk_code value="$FORM{spam_chk_code}">
<input type=hidden name=spam_chk_time value="$FORM{spam_chk_time}">
<!-- /add SpamRegistCheck -->

を追加。

template/regist_new_preview.html

[template/regist_new_preview.html](2箇所修正)
★1: <form>〜</form>内(登録実行用) 57行目付近に

<!-- add SpamRegistCheck -->
<input type=hidden name=spam_chk_code value="$FORM{spam_chk_code}">
<input type=hidden name=spam_chk_time value="$FORM{spam_chk_time}">
<!-- /add SpamRegistCheck -->

を追加。

★2: <form>〜</form>内(登録画面へのバック用) 32行目付近に

<!-- add SpamRegistCheck -->
<input type=hidden name=spam_chk_code value="$FORM{spam_chk_code}">
<input type=hidden name=spam_chk_time value="$FORM{spam_chk_time}">
<!-- /add SpamRegistCheck -->

を追加。

Copyrignt(C) 1999-2005 yomi All Rights Reserved. | WonderLink LINK/UNLINK Free.