日曜日, 3月 22, 2009

掲示板のスパム対策

 協力者からのホワイトリスト情報は、メールよりも掲示板で寄せられることの方が圧倒的に多い。掲示板は、メールとは違って、個人情報を明かさずに投稿できることと、自分の貢献が公になることから、協力者にも好まれるようである。掲示板がなければこれほど多くのホワイトリスト情報は集まらなかったかもしれない。
 掲示板のスパム投稿も問題になっている。スパム投稿のために掲示板を維持できなくなり、閉鎖した人もいる。
 私の掲示板は、他の多くの掲示板に比べてスパム投稿を受けにくかった。トップ画面に投稿フォームがなく、投稿画面へ移るのにワンクリック必要であることが幸いしたようである。また、トップ画面は記事タイトルのスレッド表示で、記事の内容の表示にもワンクリック必要であることから、スパム投稿の宣伝効果に欠けると敬遠されたことも幸いしたかもしれない。
 それでも、私の掲示板にもスパム投稿が来るようになった。そこで、スクリプトに手を加えて、投稿画面のURLを変更してみた。これにより、投稿画面をダイレクトに狙うアクセスをエラーに落とすことができる。しかし、これも破られていたちごっこになった。
 そこで、掲示板スクリプトのファイル名を変えるという方法をとった。「raib.cgi」というファイル名は「raib_3036.cgi」として、また攻撃が来たら数字の部分を変更してかわすことにする。そして、元の名前の「raib.cgi」は、掲示板へジャンプさせるHTMLを吐くシェルスクリプトにする。これが吐くHTMLは、METAタグで掲示板へジャンプさせるようになっている。Aタグは書かず、また、METAタグ中のURLは相対パスにしてフルパスをわかりにくくする。これにより、ブラウザでアクセスする人は手間なく掲示板に到達できるが、スパマーが使う自動プログラムでは掲示板に到達しにくくなる。この方法をとってからは、スパム投稿は根絶した。
 私は無精なので、スパム投稿対策機能を持つ新しい掲示板スクリプトを導入するのでなく、使い慣れたスクリプトを使い続けたかった。これでスパム投稿を排除できたのは幸いだった。投稿してくださるゲストにとっても、CAPTCHA認証の手間を強いられないのは楽だろう。
 掲示板の内容が検索エンジンに拾われなくなるが、そのくらいはやむを得ない。むしろ、ロボットによってPerlスクリプトが連続で動かされてサーバのCPU負荷が上がるよりはよいだろう。
 対策をとったのは2007年だが、今なお、投稿画面の古いURLへのアクセスが日に数回来ている。アホなボットである。

 この方法は私のネットフレンドにも勧めたのだが、その人の掲示板は、この方法をとっても何度か破られている。トップ画面に投稿フォームがあるので、スパマーに狙われやすいのだろう。それでも、古い掲示板スクリプトを使い続けたいならば、これ以上に運用が楽な防御方法はないと思う。

 参考までに、掲示板へジャンプさせるHTMLを吐くシェルスクリプトのコードは次のとおり。「euc-jp」の部分は、メッセージの文字コードに合わせる。シフトJISの場合は「shift_jis」にする。

#!/bin/sh
echo 'Content-type: text/html'
echo
echo '<HTML LANG="ja">'
echo '<HEAD>'
echo '<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=euc-jp">'
echo '<META HTTP-EQUIV="refresh" CONTENT="0; URL=./raib_3036.cgi">'
echo '</HEAD>'
echo '<BODY>'
echo '<CENTER>掲示板への攻撃を防御するため、別URLへ移動します。</CENTER>'
echo '</BODY>'
echo '</HTML>'

0 件のコメント: