スパマ対策

例の掲示板スパム対処の件だが。
…実作業としては全く進んでおらず。被害が発覚した直後に、ActivePerlとEclipse+EPICプラグインをインストールして、現状のソースコードがローカルでも動くように設定するところまでは手をつけたのだが。「特定IPからの書き込みのみ弾く」などという、ソースコードにしてたかだか1、2行の暫定的対処で書き込みがぱったりと収まってしまったので、張り合いのないことおびただしい。まあ、これだとシステム的に美しくないので、いずれ本格的な対処はするつもり。

これまで、仕事上でWebアプリの開発に携わる機会がそれほどなかったせいか(2年半ほど前にJava Servletアプリのごく一部をいじった程度)、正直言ってWebアプリのセキュリティ絡みについてはあまり知識がない。最近、社内の勉強会でRuby on Railsの本読みをしていて、せいぜいそこで得た知識くらいか。まあそんな程度の知識なのだが、色々ググって調べてみた感じだと、対処法としては

  • 書き込みフォームのあるページを現行の(静的)htmlからcgiへ変更
  • 書き込みページへ遷移した時に、ワンタイムトークン発行
  • 書き込み時に、トークンの一致するリクエストのみ受け付ける
…というあたりがよさそう? いまいち自信なし。これだと利用者側から見た利便性は現行と変わらないのが利点。
それと、このトークン絡みでちょっと思いついたのだが、はじめにトークンが発行されてからある程度(数10秒くらい?)時間が経ってからでないと(トークンが一致しても)書き込みを受け付けない、なんて条件を入れると、スパマのような自動書き込みの防御には有効ではなかろうかという気がする。人間が手動で書き込むならば、書き込みページを開いてからそのぐらい経過するのが普通だろうし。今のところ想定する仕様はそんなところ。これでスパムが再発したら(現状から見てしなさそうだが)、さらに書き込み時にCAPTCHAのようなパスワードを同時に入力してもらうなどの対処を追加するつもり。
…というところまでは主に勤務中に考えたのだが…まあ実際に作業に取りかかるのはだいぶ先になりそう。なにせ、

発送されちゃいましたからー。