メールアドレス収集ボット(クローラー)対策について

そもそもタイトルが何のことを言っているのかわからない方は まず適当なサイトで 調べてきてください。

話の前提。

  1. メールアドレスをウェブ上に公開する。
  2. "自動収集プログラム"に収集されないようにしたい。

    人海戦術に対してはどんな対処も無駄です。(そういう意味ではやはり人間はすごい!)

  3. 訪問者の利便性も損なわないようにしたい。

さて,私もその昔(Win98時代)はJavaScriptを使っていれば安全だと思っていました (実体参照なんて使ったことありません,簡単だから)。なにせあれを解釈するのは手間がかかる。 しかしまあ,解釈不可能なはずはないので,いつかはネオみたいなやつが出現するかとは思っていました。

隊長,現れました!定点観測データ報告の一例

完全解釈とはいかないまでも,まずはdocument.writeくらいはぶっこぬいてくるだろう という段階的予測のとおりに,徐々に奴らはセントラルドグマへ近づいているようです。 こうなると古典的対策であったfromCharCode+文字列連結の扉を破る蟲もおそらくもういるでしょう。 私は先日まで@や.を置換したメールアドレスをJavaScript+DOMで復元するという方法をとっていましたが, これが破られるのも時間の問題です。

ということで新たな対策をしたいわけですが,前提の最後に挙げている「訪問者の利便性」ということで, mailtoの機能をはずしたくありません。mailtoを保ったまま収集されないようにするにはどうすればよいのか。

メールアドレス表示のさまざまな工夫

このサイトではJavaScriptを使ったいろいろな方法を紹介しています。 document.writeくらいならまだしも,もしIEかなにかを使ってレンダリング完了後のDOMサーチをしてくるなら, ここで紹介されている最後の方法でしか守れないでしょう。 したがって,mailtoをキープするにはジャンプ時に動的にhrefをmailtoに変えるこの方法をとりましょう。

さてリンクをはるテキストのほうですが,JavaScriptを無効にしている人はかなりいるので(そもそもJavaScriptが動かないブラウザの人もいる), テキストだけでもメールアドレスがわかるようにしておく必要があります。よって「メールはこちら」みたいなテキストに 上記のjavascriptリンクをはっておくという処置は感心しません。 見た目でメールアドレスがわかるようにした上でプログラムが有効なアドレスをとれないようにする方法はいくつかあります。

  1. @や.を置き換える
  2. 余分な文字(REMOVEHEREなど)をアドレスに加える
  3. 画像にする

一番破られやすいのは1.です。人々が用いている置換にはいくつかパターンがあるので, その辞書を持っているプログラムなら置換を容易にクリアできます。 なんとかプログラムにわからないようにと通常のパターンではないほど難しい置換パターンをほどこすと, 今度は訪問者のほうがわからなくなるので,前提3を破ってしまいます。

よって2.か3.を適用するのがよいです。2.をプログラムが破るには意味論を理解しなければなりません。 これをパターン辞書によってなんとかすることも考えられなくないですが, 我々はこれに関しては1.の場合よりも豊富でかつ自然な(訪問者が認識できる)パターンを用意できますので, それなりのフレーズをくっつけておけば破られる可能性は低いでしょう。 しかし,それも難しくしすぎると訪問者すらわからなくなりますので,適度に容易にする必要があり, そうするとこれを破られる可能性は3.よりは高いかと思われます(根拠の薄い推測ですが)。

3.をプログラムが破るには画像認識が必要です。 現在の技術では画像を処理して文字を認識することができてしまいます。 よってYahoo!やhotmailなどでは画像にエフェクトをかけて,そのような画像認識プログラムが認識しにくいようにしています。 ですが,個人のメールアドレス公開でそこまでする必要があるかは疑問です。 画像認識能力があって,かつ,どれがメールアドレスを示している画像なのかを理解できるクローラーをつくるのは難しいので, 通常の画像化だけでも効果は十分だと思われます。 (Yahoo!やhotmailではパターンが決まっているので前文の後半が必要なく, 破るのが比較的容易なのでエフェクトが必要とされるのだと思います。) 3.の欠点は,画像を表示しないようにしているブラウザではメールアドレスが見れないということです。 さらにJavaScriptも無効にされていると完全にアウトです。そんな人もごくごく稀にいると思います。

2.や3.を破るのはAI研究の高等技術です。 技術の進歩によって2.や3.を破るクローラーが登場することはありえますが,現在ではこれで十分でしょう。 そんなクローラーが登場しそうなころには今とはまた時代が変わっていると思うので, そのとき考えればよいです。

結論としては,私のおすすめは画像化+JavaScriptでの動的mailtoです。

  1. published on 2005-01-16