OTD BBS の spam 対策 このエントリーを含むブックマーク

OTD BBSへのspam対策が難しい

必要に迫られて、急遽、調べてみました。レンタルのOTD BBSへのspamは、ほとんどが「既にspyware等にやられちまっている」多数の善意のユーザのパソコンに巣食っているbotによって無差別に投稿されています。毎日、数回の波状攻撃があり、それぞれ数十発のspam投稿となり、全てIPアドレスが異なるのです。従ってシステムで管理者用に用意されている、投稿者のホストのIPアドレスでの抑制、で対処することが困難であることがわかりました。

各BBSの管理者は泣きながら毎日spam投稿の非表示操作を数十発分、行っている現状のようです。しかしながらシステムからは有効な対処が間に合っていないようです。原理的に難しいのかも知れません。

OTD BBS の 書き込みに使う URL は、xxxxxxをユーザの番号(連番)とすると、http://otd8.jbbs.livedoor.jp/xxxxxx/bbs_write で表されますから、やられちまったPCのspambotがアクティブになると、同じspam広告をユーザの連番を利用して次々に多数の掲示板に投げる仕組みになっている感じです。

有償版での対処方法

OTD BBS には有償版があるのですが、こちらでは、現時点でかなりの効果を上げているspam対処策が実装されていました。

POSTされた投稿を受け付けるCGIディレクトリにアクセスする為に、BASIC認証が必要なのです。有償版のBBS管理者は、BBSの訪問者=利用者ごとにユーザIDとパスワードを与えることが出来、これをもってBasic認証を行い、spam投稿を禁止可能です。また、ユーザIDとパスワードをわざと一組の簡易なものにしておき、BBSのページのヘッダ部分に公知しておく利用例もあるようです。

こんなやり方もあるのかと非常に驚きました。とはいえ、有償版でだけ使える機能であり、無償広告アリ版では使えない機能です。

はてさて?音声ブラウザでBasic認証を利用できるのかな

音声ブラウザでBasic認証を利用できるのかどうか、ふと気になりまして、ググったり、犬神堂本舗さんのリンク集をあたったりして1時間ほどウロウロしたのですがハッキリわかりませんでした。Basic認証が音声ブラウザにとってアクセシビリティ上問題があるのであれば困ります。例えば、セキュMEMOであれ、openmyaであれ、過去ログが読めないでありませんか。いったいどうなんでしょう。

…どなたかご教示下さいませ。

答えを求めてウロツいているうちに、以下のサイトの記事に辿り着きしばらくの間、ため息しか出ませんでした。どうしたら良いのだろうと。IT分野で働く全ての人が自身の仕事の上で意識していければ良いと思いますし、仕事だけでなく、社会参加の全ての局面で、ひとりひとりが意識していければ良いのにと思います。実践拡大しか手はないのでしょうから、少しずつでも…

OTD BBS 無償版でのspam対策(暫定版)

ニーズがある以上、かりそめの解決策をでっち上げる必要がありました。システムがspam認知をしてくれないので、別発想になります。BBSのHTMLのカストマイズがある程度、許されていますので、なんとかしちゃいます。…以下は全くもって対策になっていませんし、筋悪ですし、わざわざ日記で書くのも恥さらしなのですが、せっかくですので、思いついて実装したものを。改善版を誰かが思いつくかもしれません。(ハッキリ言って私のポリシーでは以下の手法は詐欺なのですが、ニーズは満たしてしまったようです。苦痛です。)

ここではBBSの通常表示からspam投稿をスタイルシートを使って見えなくすることを考えます。表示方法には4通りあるのですが、通常表示の他は応用すればすぐにわかることでしょうから説明は省略します。また、当然のことながら、アクセシビリティ上の必要があってユーザスタイルシートをブラウザに設定している人を無視した対策にしかなっていません。大変にヨロシクない。spam該当部分だけ styleでdisplay:none にしてしまうだけなのですから。

BBSの通常表示では、ひとつの投稿は、<tr>で始まり、</tr>で終わるHTML記述のブロックによって表現されます。これをカストマイズします。

このひとつの投稿を、<tbody>投稿のHTML記述</tbody>という形にしてしまいます。はさむわけですね。

さて、上において、人間が投稿した場合には、<tbody> として、見えるようにしてやり、、bot機械的に投稿してきた場合には、<tbody style="display:none;"> として、見えなくしてやることが出来れば、目的は達成です。

果たしてそんな器用なことが出来るのか?OTD BBSの仕様を使ったトリックがあるのです。

● 追加変数の設定と使い方

例:〜commentという名前の変数を設定します〜

<input type="***" name="comment">

設定の方法は簡単です。nameを設定したい変数名にするだけです。

使う時は、$commentのように頭に「$」を付けて他の変数と同じように使ってください。

例えば、$ningen という追加変数を定義することにします。変数の中身の値はなんでも良いのですが、とりあえず、「ningen」にしておきます。個々の投稿において追加変数が存在するかどうかが鍵なので中身の値はなんでも良いのですね。 投稿postを受け付ける「全ての」form要素において以下を追加します。formは複数ありますから要注意です。

<input type="hidden" name="ningen" value="ningen" >

以上により、カストマイズ後、普通に人間がpostした投稿には、追加変数$ningenが定義され、OTD BBS のデータベースのその一件のレコードに格納されます。一方、spambotは、そんなカストマイズのことを知らないものと考えられますから、post内容に、追加変数$ningenは存在せず、データベースにも格納されません。

データベースから個々の投稿内容を読み出した時に、$ningenが存在すれば、それは人間が投稿したのだろうし、逆に、$ningenが存在しなければ、spambotによる機械的なpostによるものだろうと高度な確率で判定出来るわけです。

OTD BBS では、投稿を表示する画面のカストマイズが可能です。先に説明したtbody要素の表現によって、spamを不可視にする為には、例えば、以下のようにすると良いでしょう。$ningenの非存在、存在のケースによって、HTML記述を書き換えることが出来るわけです。これは便利ですね。

$!ningen{
<tbody  style="display:none;">
}
$ningen{
<tbody>
}

残念ながら以上は、超簡単すぎる説明になっています。申し訳ありません。実践にあたっては、もう少し技巧を要することでしょう。以上のままでは、過去ログは全部spam扱いになってしまいますので、全然表示されなくなります。それでokayなら構いませんが…そうもいきますまい。

ヒントを書いておきます。変数には予約されているものもあり、$seq が使えます。$seq は投稿されたナンバーで、カストマイズされる直前の最新の投稿のナンバーと$seq とを比較して、大小判定を加味した上で、display:none の付加を決めてやればよろしいのです。カストマイズ後のナンバーの投稿に限り$ningen判定をしてあげればよろしい。

ところが不幸なことに、追加変数なり、予約済み変数なりを使っての分岐にあたっては、{}の入れ子が不可能なようです。これは大きな問題です。また、$seq と大小比較を行う演算子も定義されていません。じゃぁどうするか?

JavaScriptを使うことになります。あぁ!なんていうことでしょう。あまりのことなので説明したくありません。ほんの少しだけ以下に、こんな感じ?というのを書き留めるだけでお許し下さい。

<script type="text/javascript">
var TAG$seq ;

$!ningen{
    TAG$seq = '<tbody  style="display:none;">';
}

if ($seq < CUSTOMSEQ) {
    TAG$seq = '<tbody>';
}

$ningen{
    TAG$seq = '<tbody>';
}

document.write( TAG$seq );
</script>

【ここに一件の投稿記事内容のHTML記述】

<script type="text/javascript">
    document.write('<' + '/tbody>');
</script>

上記のJavaScriptの変数CUSTOMSEQはhead要素あたりで、カストマイズする前の投稿ナンバーのカレントを定義しておけば良いでしょう。

ここまで読めばお分かりのように、ヘタレっぷりが強化されています。spma対策といいつつ、JavaScriptがオンで閲覧する人にしか恩恵がないのです。また、元々ユーザスタイルシート使用者を無視していることも否めませんでした。要するに、この対策はろくでもない手法なのです。イカサマですね。

それでもニーズを満たしているのだと言われれば、しかたがないのですが、釈然としません。OTD BBSが、なんらかの方法でサーバ側にてのspam投稿の自動判定の実装を組み入れて頂くのが一番なのですけれど。

それにつけても、spambotは恐ろしいですねぇ。防御が難しい…DDoSみたいな感じですものねぇ。インターネットユーザの皆さんが、絶対にウイルスとかワームとかスパイウェアに感染しない世の中にならないかしらと夢想。