簡単に出来る、掲示板等のスパム避け。 更新の続いている掲示板用CGIのほとんどはスパム避け機能搭載のものがリリースされていますが 既に更新終了した掲示板スクリプトを使っていると、URLを大量に書き込まれる等の スパム投稿をうけやすくなります。 これらのスパムのほとんどは、書き込みプログラムが登録されたURLに自動で書き込んでいきます。 そのため、注意書きやURLを自動リンクしないなどの対策ではスパムを減らせません。 ここではPerlやCGI作成の知識がなくてもできる簡単なスパム避け対策をいくつか紹介します。※まず最初に今使用している掲示板の対策版がリリースされているかどうかをチェックしましょう。 対策済みスクリプトへの差し替えがもっとも省コストです。 配布サイトで見つからなかったときは掲示板改造支援サイトも参照してみてください。 うまく対策版が見つかればこれに差し替えるだけでスパムのほとんど、もしくは全てを遮断できます。 この場合は下記の細々した工夫は必要ありません。 運悪く、使っているCGIにスパム対策版がない場合や、レンタルの掲示板、 プロバイダ指定の掲示板などを使っている方は下へ進んで下さい。 内容は大きく分けて3つになっています。 「htmlファイルへの簡単な追加と、ディレクトリのリネーム」 |_1.掲示板に入るための入り口を作る。 |_2.掲示板へのリンクを画像ファイルにする。 |_3.掲示板設置ディレクトリ名をユニークなものにする。 「Javaの使用とファイルのリネーム」 |_4.掲示板CGIのファイル名変更。 |_5.掲示板へのリンクにJavaスクリプトを利用する。 「CGI簡易改造」です。 |_6.CGIを改造してスパム投稿を拒否する。 ■htmlの知識と、ちょっとした手間のみで可能なもの。 1.掲示板に入るための入り口を作る。 2.掲示板へのリンクを画像ファイルにする。 3.掲示板設置ディレクトリ名をユニークなものにする。 この3つは組み合わせて使用します。 1.掲示板に入るための入り口を作る。 サイトのトップページなどから直接掲示板CGIにリンクせず、 入り口用ページを間に挟んでリンクする方法です。 他の方法と組み合わせて初めて効果が出てきます。 掲示板の入り口ページ、は主にmetaタグでガードします。 <META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW"> <META NAME="ROBOTS" CONTENT="NOARCHIVE"> 上が検索エンジン登録用ロボット避け、下がGoogleのキャッシュ機能無効になります。 Content-Typeのすぐ下あたりに仕込んでください。 <HEAD>と</HEAD>というタグの間に挟まれていればOKです。 入り口ページの実例 2.掲示板へのリンクを画像ファイルにする。 掲示板入り口へのリンクを画像ファイルに貼り付けます。 実例 3.掲示板設置ディレクトリ名をユニークなものにする。 掲示板設置ディレクトリは多くがcgi-bin直下や「bbs」「board」といった連想しやすい名称になっています。 こうした名称にあたりを付けるURL収拾プログラムが有るため、スパム登録されやすくなります。 メジャーな掲示板の初期設定ディレクトリなどもターゲットとされているようです。 そこでまずディレクトリ名を掲示板を連想させないものにします。 この時ディレクトリ名は長目にして置いた方がより効果が上がります。 例:「lukandbadroom」「ts93reopd7iu」」 後者は何かのパスワードのようですが、ここまですると見つけられ難さが上がります。 階層も深めにした方が確かです。 TOP |__ディレクトリ1(infoseekなどはcgi-bin決め打ち) |_ディレクトリ2 |_ディレクトリ3(この当たりからディレクトリ名を長目、予想しにくいものにすると吉) |_ディレクトリ4(掲示板設置ディレクトリ) 例:http://www.towano.net/bin/contents/Tasd2w8tr9j/6zXd2me3-o/ こんな感じでディレクトリを設定します。 ■CGIファイルを少しいじる、Javaスクリプトを利用する。 4.掲示板CGIのファイル名変更。 5.掲示板へのリンクにJavaスクリプトを利用する。 4.掲示板CGIのファイル名変更。 掲示板のファイル名も、設置ディレクトリと同様にスパム登録のターゲットになります。 bbs.cgiやindex.cgi、boardやnoteが名前に入ったCGIファイルはファイル名を変更しておきましょう。 これも掲示板を連想しにくく、やや長めのファイル名が好ましいです。 この時の注意としては、CGIによってはこの掲示板用ファイル名を参照する部分が ユーザー設定になっていない場合があるという点です。 設定ファイルに「掲示板CGIの名称」などの設定項目がない場合は、デフォルトのCGIファイル名で 掲示板ファイル内と、付属する全てのテキスト、cgi、pl、pm、datファイルなどを検索して 該当部分を自分が新しく付けたCGI名に変更する必要があります。 (この種の書き替え作業時は、保存の時に元の文字コードを反映させてください。 文字コードが変わると文字化けや動作不良がおきます→文字コード反映保存可能テキストエディタ□□) 3と組み合わせた例 http://www.towano.net/bin/contents/Tasd2w8tr9j/6zXd2me3-o/F7gpc_4a8i.cgi 5.掲示板へのリンクにJavaスクリプトを利用する。 Javaスクリプトを使用する場合、ブラウザ側でJavaスクリプトがONになっている必要があります。 この方法を使う場合は掲示板へのリンクがJavaスクリプトONの状態のみ使用可能であることを書き添えてください。 画像を使うよりもさらにスパムへの効果は高くなりますが、多少閲覧者に手間をかける可能性も出てきます。 計りに掛けてメリットの多い方を選択してください。 まず、掲示板へのリンクを設置するページにmetaタグを一行追加します。 <META http-equiv="Content-Script-Type" content="text/javascript"> Content-Typeのすぐ下、ロボット避けの上当たりでよいでしょう。 実例 ボタン表示用のソース <FORM><INPUT type="button" value="掲示板" onclick="window.open('http://www.towano.net/cgi-bin/Ty6jjr4o4zxV63-as/5gfGdl0a003wb8k/iK0fiUc1d82wmPa.cgi')"></FORM> 別ウィンドウで開きたいときは ('http://www.towano.net/cgi-bin/Ty6jjr4o4zxV63-as/5gfGdl0a003wb8k/iK0fiUc1d82wmPa.cgi','_blank') フレーム内に表示したいときは ('http://www.towano.net/cgi-bin/Ty6jjr4o4zxV63-as/5gfGdl0a003wb8k/iK0fiUc1d82wmPa.cgi','フレーム名') レンタル掲示板などを使用していてCGIファイルそのものをいじれない場合などは 既にスパムにあっている掲示板を破棄した上で新しい掲示板に1、3、5を組み合わせるのが最善の方法になります。 掲示板のファイル名を自分で設定できるときは4も使えます。 ■CGIを改造する。 6.CGIを改造してスパム投稿を拒否する。 6.CGIを改造してスパム投稿を拒否する。 スパム対策版がリリースされていないスクリプトで掲示板を設置する場合、 一番効果が高いのがこれになります。 改造方法は多岐に渡っていますが、その中で比較的簡単なものを一つ紹介しておきます。 注意:既に掲示板を設置している方が改造を試みる場合、 必ず正常動作するファイル群を一式バックアップした上で改造をお試しください。 どの掲示板用スクリプトにも、エラーメッセージを出すための条件を記述した部分があります。 この中で、本文に何も書き込まれていないときのエラーメッセージ部分を探します。 スクリプトの中にエラーメッセージが記述されているため、Perlの知識が無くても見つけることが出来ます。 例えばこれが if ($comment eq "") { &unLock; &print_error("$form_commentが入力されていません。",'NOLOCK'); } このようになっていれば、この下にifの後の( )の中のみを変えた記述を追加します。 if ($comment =~ "href=") { &unLock; &print_error("スパム防止のため「href=」を含む文章の投稿を規制しています。",'NOLOCK'); } if ($comment =~ "URL=") { &unLock; &print_error("("スパム防止のため「URL=」を含む文章の投稿を規制しています。",'NOLOCK'); } これはスパム系投稿の非常に多くがタグ付きでURLを投稿するのを利用した対策です。 注意書きなど特にせずに使用できますが、タグを使用しないスパムには無力となりますのでご注意ください。 この方法では効果が弱い時はhttp://を含む文章の投稿規制に変えると、ツール系のスパムをほぼ完全に防御できます。 if ($comment =~ "http://=") { &unLock; &print_error("URLを含む投稿はスパム避けのため禁止しています。戻ってから頭の「h」を抜くなどして再投稿してください。",'NOLOCK'); } この方法を使った場合は、必ず掲示板や掲示板への入り口ページに スパム避けのためにURLの投稿を禁止していること、 URLを投稿したいときは最初のhを抜いて記入して貰う旨を明記して置いてください。 別の例を挙げてみます。 if ($in{'MESSAGE'} eq "") { error("本文がありません。エラー。"); } このようなエラーメッセージを見つけたら if ($in{'MESSAGE'} =~ "http://") { error("URLを含む投稿はスパム避けのため禁止しています。戻ってから頭の「h」を抜くなどして再投稿してください。"); } 下にこのように記述するとURL入りの投稿を防御できます。 ポイントは「eq = ""」を「=~ "http://」に、変更するところにあります。 掲示板によって多少記述方法に差がありますので、 エラーメッセージと#の後のコメントを頼りに該当個所を見つけて追記してみてください。 なお、この時も変更後の保存は元のファイルと同じ文字コードにしてください。 なお、スレッド式掲示板などの場合は「新規スレッド作成」と「コメント(レス)の投稿」の 2ヶ所にスパム避けを追加する必要があります。 また、にちゃんねる系スレッド掲示板(ぜろちゃんねるスクリプトなど)は 3〜4ヶ所ほどにスパム避けを入れないとうまく防御できない様です。 以上がPerlの知識無しで可能な掲示板スパム対策です。 掲示板のスクリプトに手を入れるのであれば 「日本語を含まない投稿の禁止」「逆引きできないホストからの投稿禁止(海外からのスパムに有効)」 「特定文字列をNGワード指定」「postメソッドの指定名変更」 「一定数以上のURLを含む投稿を禁止(スパムの多くが3つ以上のURLを一度に書き込むことを利用した対策)」など 上で紹介したよりも柔軟かつ強固な対策も可能です。 ただし、どれもシンプルな書き加えではなくなりますので、Perlの知識を多少囓ってからの挑戦になります。 web日記CGI「nicky!」用スパム対策はこちらを参照してください。 改造サンプル掲示板「Mutual mind Ver. 2.73」 掲示板アイコン素材「眠りの園」 上に戻る▲ |