2011年09月05日の日記です


メールアドレス隠蔽の戦略  2011-09-05 15:18:44  コンピュータ

後日追記

この日記に書いた内容、バージョンアップして詳細を別ページに書きました。




WEB でメールアドレスを公開しながら、スパム用のメールアドレス収集ボットには見つかりたくない。

でも、ボットではなく人間に対しては、できるだけ使いやすくしておきたい。


…非常にわがままな要求です。

誰でも使えるように公開しておいたら、ボットにも公開されるのは当然のこと。

でも、現実問題として「ボットに見つからないようにしながら、使いやすく公開したい」需要はあるのです。



というわけで、仕事上のクライアントから相談を受けました。

いままで、自分の(この)WEBサイトでは、画像でアドレスを公開していましたが、これだけでは要求を満たせないのは事実。


で、研究して作ってみました。



「たぶん」スパム収集ロボットには収集できない。

でも、人間の使い勝手は「わりと」よい。

(範囲選択してコピー、ができないのが残念)



以下のフォームで、javascript 部分を生成できます。

表示されているメールアドレス部分は画像なので、そこは自分で作ってください (^^;

(あとに作り方の参考を書きますので、読んでね)





以下、技術話。


メールアドレス収集ボットは、HTML ファイルを取得して、その中から「メールアドレスらしい部分」を探し出し、収集します。


HTML ファイルの中から、なので、そのままのテキストではなく html エンティティにすればよいとか、mailto: リンクを url エンコードすればよいとか、javascript でリンクタグを生成すればよいとか、外部ファイルにメールアドレスを入れて link タグで読み込ませればよいとか言われるけど、それはダメ。


だって、いまどきブラウザもオープンソースの時代だから。

ブラウザがページを最初に開いたときに、エンティティを解釈したり、url エンコードを解釈したり、javascript を実行したり、外部ファイルを読み込んだりするところまでやらせて、出来上がった「表示直前の」データを取得すれば、メールアドレスはばれてしまう。



Javascript でリンクタグを生成するのではダメ、というのは、こちらのページで実験することができます。



残る方法は二つです。


1) 画像で表示する。


クリックしてもメーラーは開かないし、コピーもできない。

メールが欲しいからメールアドレス公開しているのに、メールしようと思っても「長いアドレスを手で間違えずに入力しないといけない」という、事実上メールを送ることを拒否した状態になってしまう。


2) メールを送ろうとした瞬間に、Javascript でアドレスを生成する。


これなら「表示直前のデータ」にもアドレスが入りません。

でも、それは「表示できない」ことを意味します。

メーラー起動しない場合、メールアドレスが存在していることを教えられません。

もちろん、Javascript が実行されない環境の人にもメールアドレスを教えられません。


1 は、メールアドレスは教えられるがメーラーに渡すことができない。

2 は、メーラー起動はできるが、メールアドレスを人間に見せられない。


というわけで、2つの方法は綺麗に補完関係にあります。

なので、組み合わせれば問題なし! …といいたいところだけど。




OCR の噂。


いまどき、OCR ソフトもオープンソースで存在します。

メールアドレスを画像化しても、OCR してアドレス収集するボットがいる、と言う噂もあります。


でも、これは OCR の癖を知っていれば対処可能。

人間にも読みにくい画像にしてしまえば、OCR はまず読めない。


いや、そこまでしないでも、「人間には読めるのに OCR はできない」画像を作るのは難しくない。


今作るメールアドレス画像は、「クリックすればメーラーが起動する」ことを教えるためのもの。

ならば、普通のリンク部分と同じように、アンダーバーをつけてはどうでしょう?


これだけで、文字の区切りが不明瞭になり、OCR には非常に読みづらくなります。

フォントも、読みづらくない範囲でデザイン性が高いものを使うと、なお OCR されにくいでしょう。


作り方は、別に特別なソフトはいりません。

WEB でメールアドレス公開したい、と悩んでいる人なら、HTML くらいは書けるはずだし、簡単な画像加工ツールくらい持っているでしょう。


なので、メールアドレスをリンク状態にしたタグを書いて、ローカルでブラウザに表示させます。

font タグで face="~" を使えば、フォントも変えられます。

どうせアルファベットなので、フリーのフォントは山ほど配布されています。


あとは 画面キャプチャして、適当に切り出せば終了。

出来上がったら、本当に OCR できないのか確認しましょう。


WeOCR Projectといものがあり、WEB ブラウザから画像をアップロードすると、OCR 結果を返してくれるサーバーがたくさん集められています。

検索すると、サーバーのアドレスとともに、どのような OCR エンジンを使用しているかも教えてくれます。

複数のエンジンで読み込ませてもうまく認識できない「メールアドレス画像」であれば、ボットに収集される可能性は低いと考えてよいかと思います。



WEB 上にも、メールアドレスの画像化をしてくれるサービスがいくつかあります。


でざいんめーる

きゃっとまーくめーる

E-Mail Icon Generator

E-Mail Icon Generator (有名ドメイン専用)




最初に設置した Javascript のタグ生成器が生成するタグの説明。


img タグ1つ。ただそれだけです。


src 部分には # と書いてありますが、これをご自分のメールアドレス画像の url に変えてください。


style 指定は、この画像上でマウスカーソルを「クリック可能」を意味するものに変えるように指示しています。これで、一見普通のリンク文字と変わらないように見えます。


で、クリックすると onClick に書かれた Javascript が起動し、暗号化(簡単なシーザー暗号ですが)されたメールアドレスを復号して、メーラーを起動します。


暗号化された文字の「エスケープ」は考慮していません (^^;;

メールアドレスに $ 9 ; | } ~ などが入っていたりすると、ちょっと困ったことになるかもしれません。

(暗号化された文字が、特別な意味を持つものに変わるため)




大切なのは、この方法が「それほど有名にならないこと」。

有名になるとボット作成者に対処されますからね。


自分がボット作者なら、明らかにメールアドレスを隠蔽している部分のタグを見つけ出して、そこの Javascript だけ実行させてみます。

そういう意味では、「img に付いた onClick で、最後が location.href に代入しているもの」は明らかに怪しい。



なので、別案も示しておきます。


・img タグに直接 onClick を指定するのではなく、周囲に別のタグをつける。

 a タグで href に mailto: だけ指定すると、Javascript を使えない/使わない環境の人でも、とりあえずメーラー起動してくれます。

 (この場合、onClick の最後に ;return!1 をつけること。そうしないと、href が優先的に動作します)


・もちろん、a タグではなく form でも 、div でも span でも font でも、どんなタグでもよい。onClick が付けばなんでも。


・onClick が怪しまれるかもしれないので、onMouseDown でも onMouseUp でもよい。

 (厳密に言えば、クリックとは「ボタンが離されたとき」に完了するので、onMouseUp のほうが違和感は少ないです。)


・location.href=d するのではなく、clipboardData.setData("Text",d) する。

 こうすると、メーラーを開くのではなく、アドレスをクリップボードにコピーします。

 (ただし IE 限定)


・onClick などのイベント属性と Javascript プログラムがセットになっていると、「メーラーを起動している可能性が高い」などと判断しやすいかもしれません。

 なので、プログラムを関数にして、別の箇所に置く。これだけでもボットを出し抜ける可能性はあります。

 (もっとも、対応付けは難しくないので、自分がボットを作る立場なら検査させるかも知れません)




Javascript プログラムは近年多用されている傾向にありますし、場合によってはゲームなどが動作してしまうため、ボット作成側も「何でもかんでも動作させてみる」というわけにも行かないでしょう。

なので、ある程度の「きめうち」が予期されます。


対策する側としては、きめ打ちされない程度に方法が分散し、撹乱できればよいわけです。




同じことは、表示画像に使用するフォントに対してもいえます。

皆が同じフォントを使っていれば、すぐに対処されちゃう。


この日記の冒頭に示した画像では、Monotype Corsiva フォントを使用しています。

(日記執筆時…画像は後で変えるかもしれない)


このフォントは、読みにくくない程度に装飾が施され、なかなか OCR しにくいように思います。


Windows 標準フォントで言えば、Mv BoliとかSegoe printとか、結構いいかもしれません。

MacOS 標準フォントだと、Apple Chanceryあたりかな?


究極は、自分の手書きを画像化することか…

でも、OCR できないことを目指しすぎて、人にもわかりにくくなっちゃだめ。微妙なところです。



同じテーマの日記(最近の一覧)

コンピュータ

別年同日の日記

13年 ジョンおじさん

16年 Gateway 2000 設立日 (1985)

17年 IH故障


申し訳ありませんが、現在意見投稿をできない状態にしています


戻る
トップページへ

-- share --

1000

-- follow --




- Reverse Link -