スパムクローラがみてる(2) 開かれたテキストエリア

(「掲示板スパムクローラーの話」から改題)


 私のウェブサイトにはいろんなCGIプログラムを置いてあるが、掲示板スパムプログラムからのアクセスがあるものとないものとに、はっきり分かれる傾向があることに最近気付いた。
 それは、「リンクからたどれる範囲に掲示板の投稿フォームらしきものがあるかどうか」である。
 たとえば、わざわざSubmitボタンを押さないと表示されないフォームは、掲示板スパムの被害に遭った事がこれまで一度もない。textareaタグのない、テキストボックスだけしかない単純な投稿フォームも、まずほとんど荒らされない。一方、リンクからたどれる範囲にあるフォームは、前回も書いたが、それがたとえ本当の投稿フォームでなくとも、毎日のように掲示板スパムボットがやって来る。
 何をもって「掲示板の投稿フォーム」とみなしているのかどうかは、今のところはっきりした事は判明していないが、私の臆測では、「textareaタグがあること」で判別しているのではないかと思われる。加えて「name, emailなどといった名前の付いたテキストボックスが同じフォームに存在すること」という条件を加えれば精度は高くなるだろう。


 どこに掲示板があるのかについては、人力で探す手もあるが、スパム投稿をする業者は大抵の場合、プログラムを利用して機械的に探しているものと思われる。そのようなプログラムに検知されないようにするにはどうしたらよいか。先程のことを実践に生かすなら、「textareaタグの含まれたフォームを隠せ」となる。
 たとえば、リンクからたどれる範囲のページには、投稿フォーム全体を付けることを止めて、「投稿する」と書いたSubmitボタンだけ用意しておく。このボタンを押してCGIプログラムにPOSTした時だけ投稿フォームが表示されるようにプログラムを作っておくとよい。GETではなくPOSTなのにも意味がある。GETではURLにパラメータを含められるので、フォームのアドレスをURLとして表現できる。しかしPOSTではそれができないので、フォームのアドレスをURLとして表現できない。現在の一般的な掲示板自動投稿プログラムは、掲示CGIスクリプトのURLとパラメータか、あるいは掲示板の投稿フォームのあるURLを登録しないと使えないが、この方法をうまく使うと、その両方の手段を奪うことになるのである。


 今のところ、ウェブサイトを巡回するクローラーと呼ばれるプログラムは、(検索サイトのもののように)良い目的のものにしろ、(スパムクローラのように)悪い目的にしろ、あくまでもリンクしかたどらないものである。Submitボタンがあっても、そこを“押して”まで次のページを探すことはしないのが普通である。Submitボタンの向こうに投稿フォームを隠しておけば、人間には容易に見つかるが、機械の場合、現在の標準的な設計のクローラーには見つけ出すことができない。
 もちろん、この方式が一般化された暁には、掲示板スパムを行う悪徳業者も次の手段を考えるだろう。しかし、後は応用である。投稿フォームを開くボタンに、人間だけにわかるパスワードを掛けるとか、他にも良いアイディアがあるかもしれない。掲示板やblogのプログラムを設計している方は、是非以上の事を参考にしていただきたい。