19 March '2006 - 23:49 | Pivot コメントスパム乙
先日から、えらく大量にコメントスパムをもらうようになった。 PageRank を上げるために自分のところにリンクさせまくるというのが目的らしい。対処方法としては、1.30 から使えるようになる「Blocked Phrases (無効ドメイン設定)」に scripts.cgispy.com と www.theguestbook.com と www.u-blog.net って書いておけばいい、ってことになってる。1.30RC とかを使ってる人はこれでとりあえずいい。
ちなみに、この Blocked Phrases は db/ignored_domains.txt.php に保存されるのだけれど、リファラだけでなくコメントなど(と一緒にポストされる URL とか email とか)にも適用されるので、いらない URL とかを書いておくと今回みたいな URL 固定で攻撃してきてる場合は、まあ、役に立つ。客が URL を変えたらどうしようもないので、当然ながら抜本的な解決というわけではないけれど。
ちなみに、おれのこのサイトはまだ 1.30系に移行してないので、この回避方法は使わせてもらえない。そういうわけで、コメントスパムを 200個くらい頂きました。ごちそうさまでした。
で、毎日たくさん頂くので、仕方なくパッチを書いた。書いたけれど、1.24 用だし誰も使わないだろうってことで、それを 1.30RC 用にしたのをここにおいておきます。数行の簡単なハック。pivot ディレクトリで「patch -p0 < pivot_130rc.commentspam.patch」です。暇な人は勝手にどうぞ。
ただし、みれば分かるように、これは「Encode Email Addresses (Emailアドレスのエンコード)」というのを使う設定にしてある場合にだけ動くようにしてある。つまり、Javascript を使うことを要求する。
Encode Email Addresses 機能が、email アドレスを Javascript で書くようにすることでメールアドレス収集ボットから隠れるのと同じ方式を使って、コメント form の隠しアイテムの値を Javascript で書き換えるようにして、コメント受信後にちゃんと書き換わったものを受信したかどうかチェックする、というようにしてある。
この簡単なトリックを潜り抜けてコメントスパムを成功させるには、Javascript を実行するか、その簡単なコードを解析して何をすればいいか判定できるように改良するかが必要。いまのところそのスクリプトはあまりに簡単すぎる固定文字列を使っているので、客がその気になればすぐに対処できるのだけれど、もしそうやってきたら、もうちょっと難しい目のスクリプトにするとか文字列をランダムにするとか、改良すればいいや、って感じ。
客が Javascript を実行するようになったら終わりだけれど、それは結構面倒なんじゃないかな。IE コンポーネントを使えばそうでもないのかも知れないけれど。よく分からない。まあ、そうしたらそうしたで、何か考えればいい。
なお、このパッチはあまりに弱いので 1.30 には採用されないことが決まってます(笑) が、誰も使わない方式なら客に対処される確率もすごく低いだろうから、当分は破られないんじゃないかと期待してます。使い始めてから 200個くらいのコメントスパムを排除できてるし、まあ、破られるまでは個人的には使う予定
davilin (ウェブサイト) - 21 March '2006 - 14:58
ちょっと心は痛むのですが、広めちゃうと対処されるし、対処されると改良しないといけなくなるし、そもそもフォーラムは嫌いなのでそっち方面には公開してませんし、しないつもりですが、URL を使うだけだと毎回新しいヤツを食らう可能性があるので、1.30 が出るまではこのパッチを使うのがいいと思われます。
なお、開発メーリングリストでは、1.30 のリリースを遅らせてでも HashCash を使って完全に防げるようにしようって流れになってます。
ひろしま - 21 March '2006 - 15:26