たわごと

このページへのリンクはお断りします。

メールアドレスの公開

ある日突然メールアドレスの公開について考えてみた

友人1のり氏とのメールで、メールアドレスの公開に伴う迷惑メール対策の方法について話題が出てきました。昔は自分のページにメールアドレスを記しておき、友人にメールアドレスを教えるのが普通でしたが、今は迷惑メールの波が押し寄せてくるのでどうにかしたいところ。一般的には収集ロボット(と呼ばれるプログラム)が自動的にサイトを巡ってメールアドレスを収集するらしいので、なるべくコイツに拾われないようにメールアドレスをサイトのお客さんに知らせればいいのですが。最近の流行はメールアドレスを画像に描いて表示するとのこと。他にもいろいろと調べてみたり、自分で方法などを考えてみました。

メールアドレスを公開するいろいろな方法
タイプ方法備考
可逆変換で記述メールアドレスの途中で、テキストが変わらない程度に無用なタグを入れておく。表示のみ。
メールアドレスを全角文字で記述する。表示のみ。
文字実体参照を使って記述する。URLではスキームも含めて表現できる。URL記述可。
非可逆変換で記述メールアドレスの途中で、メールアドレスにありえない文字を入れておき、見た人がありえない文字を取り除くのを期待する。基本的に表示だけだが、文字コードや環境によっては自動的に取り除かれることも。
メールアドレスの途中で、余計な文字を入れておき、その余計な文字を取り除くようお願いする旨を記載しておく。表示のみ。
スクリプトで記述メールアドレスをJavaScriptで記述する。アンカー生成できるが、JavaScript無効ブラウザでは無視される。
さらにメールアドレスを暗号化しておき、JavaScriptで復号化して記述する。アンカー生成できるが、JavaScript無効ブラウザでは無視される。
外部ファイルで記述スタイルシートのcontent:で埋め込む。表示のみ。対応するブラウザが少ない。I.E.は対応していない。
メールアドレスを表示するスクリプトを外部ファイルにする。アンカー生成できるが、JavaScript無効ブラウザでは無視される。
CGIで表示する。URL記述可。オフラインでは表示できない。
テキスト以外で表現メールアドレスを画像にしておいて表示する。アンカーは無理だが表示だけなら今のところ最強かも。
スクリプトで誘導JavaScriptだけで表現しHTMLドキュメントに記述しない。JavaScript無効ブラウザでは無視される。
可逆変換
かぎゃくへんかん。元に戻せる変換。変換前と変換後が規則的に関係している。
無用なタグ
<span></span>タグでくくられた要素は汎用インラインコンテナということで、それ単体では意味を持たない。
文字実体参照
&〜;で文字を記述する方法。&amp;など。
スキーム
一般にmailto:http:など。某ステックのゲームという噂もある。
非可逆変換
ひかぎゃくへんかん。元に戻せない変換。変換前と変換後の関係が不規則。ここでは自動的に元に戻せない変換という意味で用いている。
メールアドレスにありえない文字
余計な文字と重なるが、()[]<>:;\."と、先頭・連続・最後のピリオド、スペース、制御文字らしい。
余計な文字
例えばaccountスパム@対策localhost.localdomain(スパムと対策を取って下さい)のようなやつ。見た目から全角文字が使われることがあるが、強度的には半角がいいような。

自分だったらどう破るか

もし自分が必要に迫られてHTMLファイルからメールアドレスを自動的に拾い出すという作業をする場合、どうやったら実現できそうか考えてみました。まず拾い出すべき一般的なメールアドレスというものは次のようなパターンになります。HTMLファイルからこのパターンに当てはまるものを抜き出していけばいいのです。

非メールアドレス文字群メールアカウント文字群@サーバ・ドメイン文字群非メールアドレス文字群

まず可逆変換タイプについて考えてみます。このタイプは変換前と変換後のパターンが予想できますから、前もって変換を戻しておけばいいのです。つまり、収集ロボットに対してはあまり強くなさそうです。以前、文字実体参照について書きましたが返上です(笑)。逆に非可逆変換タイプのものについてはパターンが分からないのでロボットが見落としてくれそうです。しかし手を抜いてはいけません。メールアドレスに挿入する余計な文字を全角文字にしておくと、逆に全角文字だけを抜いてしまえば・・・と考えられます。制御文字の場合も同様かもしれません。ちなみにEdMax(メールソフト)とOpera7の環境ですが、@の両隣に制御文字13を入れておいてもEdMaxで自動的に取り除いてくれました。イイ仕事してますね。

次にスクリプト・外部ファイルのタイプについて考えてみます。せっかくスクリプトで記述しても、メールアドレスをそのまま書いていたら意味がありません。外部ファイルにスクリプトを書いたりスタイルシートで埋め込んだ場合でも、外部ファイルを読み込んで同じように探していけば見つかることになります。実際に外部のスクリプトでもロボットに拾われたという話があるそうです。CGIから表示する方法は強力そうな感じがしますが、もしロボットがCGIの出力を受け取っているとなれば、あまり意味がないのかもしれません。詳しい人教えてください(笑)。

都合上、スクリプトで記述するタイプと同じタイプに分類してありますが、暗号化したメールアドレスをスクリプトで復号化して表示する方法は少し勝手が違ってきます。可逆変換タイプでの方法以外の暗号化方法ならば、ロボットからするとパターンを見つけるのはかなり難しくなりそうです。

最近流行のメールアドレスを画像に書いて表現する方法、これはかなり強力そうです。収集ロボットが画像から文字を解析するモジュールを組み込まなければとても無理。収集する方も時間もかかりそうで、表示だけなら今のところ最強かもしれません。将来解析モジュールを搭載したロボットが出てくるまでの話ですが。最近の流行というのもうなずけます。

やっぱり・・・最近のロボットプログラムはOCR機能を用いて画像の文字列でさえ認識してくることもあるそうです。

自分だったらどう対抗するか

画像を使う方法が強力かなと思いますが、あえてヒネクレ者?の私はHTMLやスクリプトだけでどこまでスマートかつエレガント(笑)にできるか考えてみたいと思います。そうすると暗号メールアドレスをスクリプトで復号表示する方法が一番強力のようです。しかし、もう少し改善点はないのでしょうか。

少し話がそれますが。私はWindowsで動くとても便利なソフトウェアを使わせてもらっています。HTMLを作成するソフトなのですが、その説明文の中でInternetExplorerのコンポーネントを利用しているという記述を見たことがあります。そのソフトウェアでは、ブラウザの表示される見た目ほぼそのままに編集できるところがとても使いやすく出来ています。

ここで私はあることに気がつき、一つの仮定を立ててみました。収集ロボットがInternetExplorerに表示させたテキストからメールアドレスを拾われる可能性はないのだろうか?と。もしそれが可能ならば、暗号化してあったとしても最終的に表示されたものから拾われてしまうかもしれません。

ならば、記述しなければいいじゃん!ということでスクリプトで誘導する方法を考えてみました。スクリプトで復号化するところまでは一緒なのですが、そのまま表示やアンカー作成・・・つまり記述するのではなく純粋にスクリプトだけで表現するか、メール送信までたどり着くことです。HTMLに記述されませんので、どうしても表示させたければ画像を使えばいいです。まぁ実際には最終的にメール送信できれば表示する必要もないような気もしますがどうでしょうか。なんとなく人間の手が必要な気がするので当分は大丈夫かな?と勝手に思っています。スクリプトでメール送信までできますが、Opera7ではメールアドレスの最後に?が付いてしまうので、ダイアログ表示にします。別の脆弱性も出てきますしね。このページでもこの方法で使用してあります。

Opera7でもメールアドレスに続けて?subject=FROM_SITE:などのようにしておくと対応できることがわかりました。

ちょっとその前に

これまで収集ロボットに対抗する手段についていろいろ書いてきましたが、これらはあくまでも収集ロボットによる自動収集の確率を減らすのが目的です。ページを見に来てくれた人にメールアドレスを教えるのですから、悪者が見てメールアドレスを知られることだって当然あります。それが嫌ならメールアドレスを公開しないことです。公開するならば知らないメールが来ることは覚悟しておきましょう。ちなみに、yahoo/geocitiesのホームページレンタルとメールアカウントレンタルしている人(****@yahoo.co.jp)は、たぶん隠しても無理です。

れっつらごー

下のフォームはJavaScriptが有効でないと動作しません。オフラインでも動作します。またこの方法は安全である保証はありません。自己責任でお願いします。

ここにメールアドレスを入れて
を押すか、 (その2はうまくいかない場合もあるかも)を押すと
スクリプト誘導によるメールリンクのアンカータグがここに入りますので

あなたのページにコピー&ペーストすれば完成です。


トップページへ

このページへのリンクはお断りします。

こな メール