サイトメニュー | 掲示板スパム対策 |
---|---|
|
|
このページから読み始めると「スパム対策は難しい」と誤解されるおそれがありますので ここでは比較的簡単で効果の大きいスパム投稿対策の改造例を具体的な改造例を挙げてご説明します。レンタル掲示板などを利用していて、掲示板を改造できないという方も掲示板へのリンクを工夫する等で対策をすることができますので、決して諦めないで下さい。 なお当サイトで公開しているスパム対策改造版スクリプトを利用できる方は、下記のような改造の必用は一切なく、スクリプトを入れ替えるだけで簡単に強力なスパム対策をすることができます。左側の「改造版スクリプト配布」よりご使用掲示板の改造スクリプトをダウンロードしてご利用下さい。
ほとんどの掲示板ではメールアドレスの入力を任意にしており、一部の掲示板では入力を必須にしています。そのため、スパム投稿では全ての掲示板に書き込みできるようにメールアドレスを必ず入力するという傾向があります。そこでこれを逆手に取り、メールアドレスを入力した場合には投稿できないようにしておくことで、スパム投稿は簡単に排除することができます。ただし、このように入力を禁止した場合には一般のユーザーの方に周知する必用がありますので、必ず「メールアドレスを書き込まない」旨注意書きを書いておきましょう。 【メールアドレス入力を禁止の改造例】 <td><input type="text" name="email" size="28" value="$ceml"></td> ここを次のように赤文字部分を書き加え、value=の値を消しておきます。 <td nowrap><b>Eメール</b></td><td><input type="text" name="email" size="28" value="" <b style='color:#ff0000'>入力禁止</b></td> 次に、メッセージの書き込み処理ルーチンを探し出します。KENT氏のスクリプトでしたら sub regist { 以下が書き込みのサブルーチンになっています。そこに、下記の一行を書き加えます。 if ($in{'email'}) { &error("メールアドレスは入力禁止です"); }なお、$in{'email'}の部分は、スクリプトによっては異なり、$in{'mail'}、$FORM{'email'}、$FORM{'mail'}、$email、$mailなどであったりします。スクリプト側で使っているメールアドレス変数にあわせてください。 スパムの目的はURLの宣伝です。したがって、URL宣伝のないスパムは存在しません。そこで、上で書いたメールアドレスの入力禁止と同じ方法でURLの入力を禁止します。ごくわずかではありますが、メールアドレスを入力しない例もありますので、こちらもあわせて禁止設定をしておきましょう。 【URL入力を禁止の改造例】 <td><input type="text" name="url" size="50" value="$curl"></td> ここを次のように赤文字部分を書き加え、value=の値を消しておきます。 <td nowrap><b>参照先</b></td><td><input type="text" name="url" size="50" value=""> <b style='color:#ff0000'>入力禁止</b></td> 次に、メッセージの書き込み処理ルーチンを探し出します。KENT氏のスクリプトでしたら sub regist { 以下が書き込みのサブルーチンになっています。そこに、下記の一行を書き加えます。 if ($in{'url'}) { &error("URLの入力は禁止です"); }なお、$in{'url'}の部分は、スクリプトによっては異なる場合があります($FORM{'url'}、$urlなど)。URLに使っている変数にあわせてください。 上記のメールアドレスやURLの入力禁止では、完全には入力欄を消してしまわないようにしましょう。確かに見た目は良くありませんが、入力禁止の入力欄をあえて残しておくことが重要なのです。どうしても見栄えが良くないので見えないようにしたいという方は、スタイルシートのdisplay:noneを使うことによって非表示にはできます(当サイト配布のスクリプトで採用しています)。 なお、当サイトで配布している改造スクリプトではe-mailとURLの入力を必須としても、スパム投稿を排除することができます。e-mailとURLの入力を禁止する掲示板と入力を義務づける掲示板が混在していれば、画一的なスパム投稿は不可能になります。 何と言っても、http://〜をずらずらと書かれるスパムは迷惑です。そこで、http://〜を多数書き込んだ場合に投稿を拒否することを考えます。下記のようにしてコメント内のURL(http://〜)数をカウントし、$urlnumに入力します。 $urlnum = ($in{'comment'} =~ s/http/http/ig);if ($urlnum >= 10) { &error("URLの多数書き込みは禁止です"); } とすると、URL(http://〜)が10以上の書き込みを拒否することができます。なお、$in{'comment'}およびcommentの部分はスクリプトによって異なる場合があります($in{'message'}、$FORM{'comment'}、$FORM{'message'}、$comment、$messageなど)ので、ご利用スクリプトをご確認下さい。なお、この機能は当改造スクリプトに組み込み済みです。 (補足説明) 英文スパムのほとんどは、メッセージに日本語がありませんでした。ただ、最近は日本語の挨拶文や名前、タイトルを使って書き込むスパムも多くなっています。日本語の有無だけではスパム排除は難しくなっています。まずは日本語のない書き込みを禁止します。 if ($in{'comment'} !~ /(\x82[\x9F-\xF2])|(\x83[\x40-\x96])/) {&error("日本語を書いてください。"); } とすると、ひらがな(\x82[\x9F-\xF2])あるいはカタカナ(\x83[\x40-\x96])が含まれていない書き込みを拒否することができます。 ひらがなを記述するスパムも存在しますので、この対策だけでは不十分です。さらに my @period = ("、",",","。",".");my $flag = 0; foreach (@period ) { if ($in{'comment'} =~ /$_/) {$flag = 1; last;} } if (!$flag) { &error("句読点を書いてください。"); } とした方が効果的です。なお、$in{'comment'}およびcommentの部分はスクリプトによって異なる場合があります。 投稿削除のパスワード(暗証キー)とは別に、「合い言葉」を入力するように設定(入力必須)しておきます。「合い言葉」が一致しない場合には投稿を許可しないようにします。この「合い言葉」は一般ユーザーの方がすぐにわかるように、掲示板かサイトトップページの目立つところに書いておきます。また、「合い言葉」は2バイト文字(いわゆる全角文字)を設定しておけば、日本語を表示・入力できないプログラム(外国)からのスパムは100%排除することができます。さらに、単に「合い言葉」を書いておいて入力してもらうのではなく『合い言葉には「○×△」をひらがなで書いて下さい』のように間接的に指定しておいたり、「合い言葉」や「合い言葉」のヒントを画像で表示しておくと、プログラム投稿は完全に排除できます。 【「合い言葉」設定の改造例】 次に投稿者名の入力のフォームを探し出し、その下あたりに下記のように書き加えます。 <tr><td nowrap><b>おなまえ</b></td> <td><input type="text" name="name" size="28" value="$cnam"></td> </tr> <tr> <td nowrap><b>合い言葉</b></td> <td><input type="text" name="aikotoba" size="10" value="$caikotoba"> <b>合い言葉には $aikotoba と入力して下さい。</b></td> </tr> メッセージの書き込み処理ルーチンに、下記のようなこの合い言葉のチェックを書き加えます。 if ($in{'aikotoba'} ne "$aikotoba") { &error("合い言葉が正しくありません。"); }最後にクッキーの設定を変更します。KENT氏のスクリプトですと &set_cookie という文字を検索すると、下記のようなクッキーの設定プログラムがありますので、 &set_cookie($in{'name'},$in{'email'},$in{'url'},$in{'pwd'});これを下記のように書き換えます。 &set_cookie($in{'name'},$in{'email'},$in{'url'},$in{'pwd'},$in{'aikotoba'});これでクッキーに合い言葉が保存されます。次にクッキーを読み出す部分を変更します。KENT氏のスクリプトは大抵 &get_cookie になっていますので、この語句を探すと良いでしょう。 # クッキー取得local($cnam,$ceml,$curl,$cpwd) = &get_cookie; このようなクッキー取得プログラムが見つかったら、下記のようにクッキーの合い言葉を取り出すように追加変更します。 # クッキー取得local($cnam,$ceml,$curl,$cpwd,$caikotoba) = &get_cookie; これは強力です。スパム投稿の目的はURLを大量に書き込み宣伝することですから、スパム投稿にはURLが必ずあります。URLの書き込みを禁止するとスパム投稿は完全に排除できます。しかしURLを貼れないとなると普通の投稿もで非常に不便ですよね。そこでURLを書き込みたいときにはhttp://〜と記述しないで、ttp://〜などと書いてもらうようにしておき、cgi内で変換して表示するようにすると良いでしょう。この記述方式も一律ではなて、掲示板によってさまざまな方式があることが望ましいです。 【URL入力の禁止改造例】 <td colspan="2" nowrap><b>メッセージ【メッセージ内のURLは先頭のhを抜いて書き込んで下さい。】</b></td> <td><textarea name="comment" cols="56" rows="7" wrap="soft"></textarea> </tr> 次に、書き込み処理ルーチンに下記のようなチェック行を書き加えます。 if ($in{'comment'} =~ /http\:\/\//i) { &error("URLの直接入力は禁止です。"); }自動リンク(たとえば、sub auto_link )があれば、こそを下記のように変更します。下記は ttp://〜 と書かれたURLを http://〜 に変換して自動リンクするスクリプトの例です。 $_[0] =~ s/([^=^\"]|^)(ttps?\:[\w\.\~\-\/\?\&\=\@\;\#\:\%\,]+)/$1<a href=\"h$2\" target=\"_blank\">h$2<\/a>/g;NGワードを設定して、特定の語句やサイトの宣伝を禁止させる方法です。当サイトで配布しているNGワードデータをそのまま利用する方法を記述しておきますが、NGワードデータを書き換えることでNGワードの設定は自由に変更できます。 【NGワード設定の改造例】 ($flag,$reason) = &spam_check($comment,$name,$url,$email,$subject); if ($flag) { &error("$reasonため投稿できません。"); } $comment,$name,$url,$email,$subjectの部分はそれぞれ、書き込み内容、名前、URL、メールアドレス、標題です。また、&errorはエラー表示ルーチンを表します。この変数部分は、ご利用スクリプトにあわせて変更して下さい。 そしてスクリプトの任意の場所(最後の方)に下記のNGワードチェックルーチンを追加します。 #------------------------------------------------- # NGワードチェック #------------------------------------------------- sub spam_check{ my ($cm,$na,$ur,$em,$sb) = @_; my $flag = 0; my $reason = ''; if (-e $spamdata) { # 禁止URLデータをロード open(SPAM,"$spamdata"); my $SPM = <SPAM>; close(SPAM); # 禁止URLの書き込みをチェック foreach (split(/\,/, $SPM)) { if(length($_) > 1) { if ($cm =~ /\Q$_\E/i) { $flag = 1; $reason = "名前/コメント内に禁止語句$_を含む"; last; } if (!$flag && $na =~ /\Q$_\E/i) { $flag = 1; $reason = "名前/コメント内に禁止語句$_を含む"; last; } if (!$flag && $ur =~ /\Q$_\E/i) { $flag = 1; $reason = "URLに禁止語句$_を含む"; last; } if (!$flag && $em =~ /\Q$_\E/i) { $flag = 1; $reason = "メールアドレスに禁止語句$_を含む"; last; } if (!$flag && $sb =~ /\Q$_\E/i) { $flag = 1; $reason = "タイトルに禁止語句$_を含む"; last; } } } } return ($flag,$reason); } レンタル掲示板などを利用しているため改造ができない場合でも対策は可能です。一つはレンタル元のサービス会社にスパム対策を依頼することです。また、当改造スクリプトの採用も可能です(スリーエスサービスのようにスパム対策済みスクリプトを採用しているレンタルサービスもあります)ので、希望される方は掲示板レンタル会社の方へ依頼して下さい(当方に依頼されても対応はできません)。利用者の皆さんからの要望が多ければ採用されるでしょう。 もう一つの対策は掲示板へのリンク方法を工夫することです。スパム投稿対策に消極的なレンタルサービスがあることも事実です。改造スクリプトの導入をお願いしても採用されない場合には新たに掲示板を取得して、掲示板へのリンク方法を変更することでスパム対策をします。 当方が管理している掲示板には掲示板スパムがほとんどありません。少なくとも3年以上前からゼロ件です。これはCGIのファイル名を一般的な名称から変更しているのに加え、トップページから掲示板へのリンクをJavaScrip表示にしているため、検索プログラムでリンクを辿って掲示板へ行けなかったり、掲示板のURLが収集されにくくなっていると考えられます。掲示板(CGI)の名称を変更した場合やスパム投稿のひどいレンタル掲示板の利用をやめて新たに掲示板を設置する場合には、アドレスを変更するだけではなくリンクをJavaScriptで記述してきましょう。 リンクをJavaScriptで記述する方法はこちらに詳しく書いてありますが、こちらに、簡単に掲示板URLのJavaScript表示用できるようプログラムを用意しました。掲示板URLを変更し、このjavascript表示を利用することで掲示板の種類によらずスパム投稿を防ぐことができます。 もう一つ、Javascriptファイルを作成してそれを参照する方法をご説明します。たとえば掲示板URL(アドレス)が"http://www.example.com/cgi-bin/bbs.cgi"であるとします。通常のリンク表示ですと、 document.write(url.link("http://www.example.com/cgi-bin/bbs.cgi")); とだけ記述します。もちろん、http://www.example.com/cgi-bin/bbs.cgiの部分はご自身の掲示板アドレスを記述し、「掲示板」の部分も適当に変更します。このファイルを、たとえばbbsaddress.jsというファイル名に変更して保存します。Javascriptファイルと察知されないようにbbsa@ddress.jsのようにアットマークを入れておくのも良いです。次に、ホームページのhtmlファイルに、 <A HREF="http://www.example.com/cgi-bin/bbs.cgi">掲示板</A>と記述している掲示板へのリンク部分を <script type="text/javascript" src="bbsaddress.js"></script>と書きます。bbsaddress.jsの部分は先ほどのファイル名を同じくしておきます(アットマークを入れた場合には、こちらでも入れておく)。そして、このホームページhtmlファイルの上部ヘッダ部分(<head> 〜 </head>の間、<meta・・・と記述してある部分)に下記のメタタグ なお、掲示板をフレーム内に表示している場合にはBASEタグを使います。詳しくはこちらをご覧下さい。 それと、掲示板のヘッダーに <meta name="ROBOTS" content="NOINDEX,NOFOLLOW">を書き加えておき、Google等の検索サイトに掲示板のアドレスが掲載されないようにしておきましょう。 また、JavaScriptを使ったリンク制限として、「document.referrer.indexOf」があります。これは指許可しているURL以外からのリンクを弾くJavaScriptで、実際にこのページにも利用しております(このページURLをブラウザのURL欄に入力して直接開こうとするとトップページへ飛ばされます)。 document.referrer.indexOfの使用方法はこちらを参考にしてみて下さい。先ほどのJavaScriptでのリンク記述と併用すると、JavaScriptがONなら直接不正な書き込みをできなく、JavaScriptをOFFにすると掲示板自体にアクセスできなくなり、ブラウザ以外からの不正な書き込みやアクセスをシャットアウトできます。 JavaScriptでリンクを表示した場合には携帯からアクセスできないことがあります。そこでQRコード(2次元バーコード)を使って携帯からも簡単にアクセスできるように工夫します。掲示板URLをQRコードで表示しておき、携帯からアクセスする場合にはこのコードを読み取ってもらうようにします。QRコードの作成には、たとえば、Psytec(サイテック)のフリーソフト 『QRコードエディタ』を利用します。これを使うとURLをQRコードに、あるいは逆にQRコードをURLに戻すこともできます。 リンク方法の変更でスパム対策をできるのは、新たに掲示板を設置した場合に限られます。既にスパム投稿がひどい掲示板には効果がありません。 普通の投稿者はトップページから掲示板にアクセスして投稿します。しかし、スパム投稿は掲示板のURLリストだけを使い、掲示板に直接アクセスして投稿をします。そこでこのように直接掲示板にアクセスした場合には投稿をできなくすることで、スパム投稿をさせなくすることができます 掲示板への直接アクセスを禁止する場合には このようにプログラムによる自動投稿を排除するためには、さまざまな設定の掲示板が混在する状態が望ましく、ユニークな設定の掲示板であればあるほど、スパム投稿されにくいことになります。 |
|