お手軽(?)スパムブロック(1) フリーCGIに投稿キー機能をつけてみる 曲がりなりにもサイトなど持ち、かつ掲示板を設置しているとスパムに悩まされませんか?
「掲示板改造支援サイト」・・・フリーCGIの有名どころ、Kent-webの配布しているCGIのスパム対策部分を強化したものを配布しているサイトです。ちなみに、私も当サイトの掲示板に使わせていただいております。効果の方は、いまのところ有効なようです。ただ、うちは過疎サイトもいいところなので、あまり参考にならないかもしれませんが(^^ゞ
改造したスクリプトについては、こちらのサンプルをご覧下さい → sample
なお、同意事項と関係しますが、このCGIに関する話題などは、当サイトの正規掲示板にて行って下さい。サンプル掲示板に書き込まれても、レス等は行わない場合が多いですし、第一見逃す可能性大です(^^ゞ
コピーしたら、オリジナルの「aska.cgi」ソース文末にコピーします。 |
if ($in{'keycode'} ne $in{'rightkey'}) { $err .= "投稿キーが不正です。<br>"; } |
実際に記述すると以下のようになります。
# フォーム内容をチェック local($err); if ($in{'name'} eq "") { $err .= "名前が入力されていません<br>"; } if ($in{'comment'} eq "") { $err .= "コメントが入力されていません<br>"; } if ($in{'keycode'} ne $in{'rightkey'}) { $err .= "投稿キーが不正です。<br>"; } if ($in{'email'} && $in{'email'}!~ /^[\w\.\-]+\@[\w\.\-]+\.[a-zA-Z]{2,6}$/) { $err .= "Eメールの入力内容が不正です<br>"; } |
ここまでの改造をした上で、動くかどうかチェックしてみましょう。
最後にユーザー設定の追加部分です。投稿キーのデザイン要素も代数化しているので、それに関する設定も必要になりますので。以下の内容をユーザー設定に加えましょう。
# タイトル直下説明文...""内に記入。途中改行を入れたい場合は、<br>を入れて下さい。 $ext_text = "投稿キー入力欄横の数値を入力しないと、無効な投稿として処理されます。<br>表\示される投稿キーは、固定されておらず、投稿画面を開く度、ランダムに変化します。"; # 説明文文字サイズ $text_s = "16px"; # 説明文文字色 $text_c = "#5f9ea0"; # 投稿キーのフォント色 $keycolor = "#00008b"; |
全て、""内に指定する項目を入れていくのですが、多少は分かりやすくなるかと思い、サンプルCGIに使用している設定項目をそのまま入れています。$ext_textの値は、一見複数行に渡っているように見えますが、実際には文末のセミコロンまでを含めて一行文字列のデータです。
改造手法は以上!
次は、このCGIをベースにもうワンステップ改造を進めたものです。
次に、(1)の投稿キー対応型の改造を施したCGIにアクセス制御を組み入れます。
アクセス制御といっても、掲示板は原則として、不特定多数のユーザーとのコミュニケーションを目的としたスクリプトですから、別に要ID・パスワードでのアクセスをしようというわけではありません。単に、直接アクセスを制限しようというものです。
方法としては、.httpaccessを用いた方法やクッキーを使用した方法がありますが、あいにく.htaccessは無料サーバーの殆どは使用禁止ですし、クッキーを使用した方法は現在の私では心もとない(^^ゞ
ではどうするのか?
「aska.cgi」の場合、ひとつのスクリプトで「記事表示・投稿・編集・削除」という動作を行います。フォームでそれらのデータを送る際には、実は「mode」という要素にそれぞれ値を与え、その値により処理内容を切り替えているのです。この切り替えのうち、「記事表示」については、実は「mode」が値を持たない状態でアクセスした時に表示される仕組みになっているのです。そこで、この「記事表示」も「mode」が「load」という値を持っている時にのみ表示するようにしました。指定された以外の値、または空データの場合にはエラーが返ります。サブルーチンを(1)の状態からさらにひとつ増やします。