→入り口に戻る

Tips:セキュリティ問題と対策について:

最近掲示板やブログ等を設置していると多い英文スパム等の被害。BBSNOTEで出来る対策をこちらに記載します。

★基本的な対策(v7/v8共通):

・configファイルで、パスワード入力を必須にする‥‥
メールアドレスの入力を必須にしてしまうと、通常の書き手でも嫌がる人が多いですが(個人情報の問題で)
パスワード入力が必須項目ならそれほど抵抗も無く対策が取れると思います。

・スクリプト名を変更する‥
デフォルトのbbsnote.cgiを任意のファイル名に変更するパターンです。スクリプトには割と有効かもしれません。
変更の際には、config等の本体を呼び出してるファイルがあれば一緒に書き換える必要があります。

・データフォルダ名を変更する‥‥
これもスクリプト対策。config設定も書き換えておきましょう。

・ログ保管はマメに‥‥
BBSNOTEには過去ログ生成機能がありません。
ログを保存したいのに流されてしまう所は特に注意する必要があります。
他所の絵板で描いた物に関しては各自のパソコンにDLしておくのが良いでしょう。

★モジュールを使う:

・WCSのsecurityモジュール(v8)‥‥ホスト、IP設定で弾きたい時に有効です。htaccessが使えればそちらを利用するという手もあります。スクリプトは本家→倉庫→v8→モジュール内に有ります

・SINさんのモジュール(v7)‥‥・いろいろありますので、必要に応じてご利用下さい。[Website]
特に使えそうなモジュール:特定単語禁止モジュール、特定ハンドル禁止モジュール、投稿認証モジュール、アップロード特定拡張子遮断モジュール

・なぷ〜さんのモジュール(v8)‥‥禁止ワード設定が可能になります。
当人のサイトが現在落ちているのでDLはこちらか本家の倉庫から。


■以下こちらは2chからの情報です。こちらでのサポートは出来ませんので使用は自己責任の上で。
297〜299のコード修正(305,306参照)は行っていません。

297 :Name_Not_Found :sage :2006/05/30(火) 11:56:26 ID:???
英語SPAM対策の改造手順(BBSNote V8.0b19 )

bbsnote.cgiの
4600行目に1行追加

elsif('CHECK_MESSAGE_HANKAKU' eq $s){$r[0]='日本語でコメントを記入してください'}

3418行目に5行追加

if ($IN{message} =~ /^[\x20-\x7E]+$/) {
if ($IN{message} !~ /^[\xA1-\xFCFF]+$/) {
push @ERR,&Info('CHECK_MESSAGE_HANKAKU',$len);
}
}

追加箇所は以上です。
先に3418行の方を追加すると、4600行目の方はその分ずれますので4605行目になります。
以上の修正で、半角文字だけの投稿を拒否します。
2バイト文字が含まれていると投稿を受け付けますので、ロシア語などのSPAMには効果はありません。


298 :Name_Not_Found :sage :2006/05/30(火) 11:58:00 ID:???
上記の改造を、前後の行も合わせて説明すると具体的に以下のようになります。

4599行目から
-----
elsif('CHECK_MESSAGE' eq $s){$r[0]='メッセージの記述がありません!'}

elsif('CHECK_TITLEOVER' eq $s){$r[0]='タイトルの文字数が多すぎます!'." 現在値 $arg[0]\/制限値 $CFG{ LimitTitle }"}
-----
↓
-----
elsif('CHECK_MESSAGE' eq $s){$r[0]='メッセージの記述がありません!'}
elsif('CHECK_MESSAGE_HANKAKU' eq $s){$r[0]='日本語でコメントを記入してください。'}

elsif('CHECK_TITLEOVER' eq $s){$r[0]='タイトルの文字数が多すぎます!'." 現在値 $arg[0]\/制限値 $CFG{ LimitTitle }"}
-----



299 :Name_Not_Found :sage :2006/05/30(火) 11:59:21 ID:???
3417行目から
-----
if($len > $CFG{ LimitMessage }){ push @ERR,&Info('CHECK_MESSAGEOVER',$len)}

}
-----
↓
-----
if($len > $CFG{ LimitMessage }){ push @ERR,&Info('CHECK_MESSAGEOVER',$len)}
if ($IN{message} =~ /^[\x20-\x7E]+$/) {
if ($IN{message} !~ /^[\xA1-\xFCFF]+$/) {
push @ERR,&Info('CHECK_MESSAGE_HANKAKU',$len);
}
}

}
-----

以上です。
連投すみません。

305 :Name_Not_Found :sage :2006/06/21(水) 04:59:39 ID:???
299 :Name_Not_Found :sage :2006/05/30(火) 11:59:21 ID:???
3417行目から
-----
if($len > $CFG{ LimitMessage }){ push @ERR,&Info('CHECK_MESSAGEOVER',$len)}

}
-----
↓
-----
if($len > $CFG{ LimitMessage }){ push @ERR,&Info('CHECK_MESSAGEOVER',$len)}
if ($IN{message} =~ /^[\x20-\x7E]+$/) {
if ($IN{message} !~ /^[\xA1-\xFCFF]+$/) {
push @ERR,&Info('CHECK_MESSAGE_HANKAKU',$len);
}
}

}
-----

以上です。
連投すみません。

>>299
> if ($IN{message} =~ /^[\x20-\x7E]+$/) {
> if ($IN{message} !~ /^[\xA1-\xFCFF]+$/) {
> push @ERR,&Info('CHECK_MESSAGE_HANKAKU',$len);
> }
> }
ここって
if ($IN{message} ne '' && $IN{message} !~ /[\xA1-\xFCFF]/) {
push @ERR,&Info('CHECK_MESSAGE_HANKAKU',$len);
}
こうじゃないの?いや試してないんで保障はできないけど。

中身が全て半角だった場合に全て全角ではなかった場合…って意味わからんよ。
それとCheckInput()はConvertMessage()の前で行われるから
メッセージ文中にはまだ改行コードが含まれているのも注意した方がいい。
何となく、元コードだと1行目しかまともに判定できてなかったヨカーン

306 :Name_Not_Found :sage :2006/06/21(水) 05:05:32 ID:???
あれ?A1〜FCって何チェックしてんだこれ?
ひょっとして
if ($IN{message} ne '' && $IN{message} !~ /[\x81-\xFC]/) {
push @ERR,&Info('CHECK_MESSAGE_HANKAKU',$len);
}
が正解かなぁ。




480 :Name_Not_Found :sage :2006/08/22(火) 00:19:17 ID:???
BBSNOTE(Ver8)の英文スパム対策は、こんな感じでやってる。

bbsnote.cgiを開いて「sub CheckString」で検索して、その下の行に
$IN{message} !~ m/(?:\x82[\x9F-\xF1])/ and die;

本文中にひらがな(SJIS)が含まれなかったら終了という処理ね。