読者です 読者をやめる 読者になる 読者になる

スパムの餌食にならずにメールアドレスをウェブ上に掲載する方法・自分用まとめ

その他

ウェブ上にメールアドレスを掲載するとスパムメールが山ほど届く,というのはここ数年間のお約束になってしまった感があります。7, 8年前に趣味のウェブサイトをやってたころはスパムが大量に届くこともなく平和だったなーと今になって思うわけです。
で,最近またこのアドレスの記述の件で悩んでいます。アドレスをサイト内に書くときにどうするか。いくつかの手法が考えられてきました。メリット・デメリットを再認識するためにまとめてみます。

実体参照エンコードする

「@」など,メールアドレス中の文字を「@」なんて感じで実体参照エンコードする,という方法。
この手法を「hoge@example.com」というアドレスに適用すると「hoge@example.com」となります。「@」を目印としてメールアドレスを収集するボットは,前者の文字列はメールアドレスだと解釈しますが,後者はメールアドレスではないと解釈します。
では,同じ文字列をブラウザが表示させるとどうなるか。ブラウザは「@」の部分を「@」にデコードして表示しますので,ブラウザを使って観覧する人は普通にメールアドレスが見れるということになります。またこの手法はHTMLの仕様的にもなんら問題が無く,メールアドレスへのリンクをページ中に設置することができます。
一見,すばらしい方法であるように思えますが,この手法はボットが少し賢くなると通用しなくなってしまいます。考えてみれば当然です。実体参照をデコードする方法というのはきちんと仕様として定められており,そのような機能をボットに搭載するのは難しいことではないでしょう。実態参照をすべてデコードしてから改めてメールアドレスに該当する部分を探せばよいのです。数年前なら通用した手法かもしれませんが,現在の賢くなった(であろう)ボットに対して通用するとは思えません。
また,実体参照エンコードする箇所を増やす,具体的にはメールアドレスの「@」以外の部分をエンコードする,という手法も紹介されていましたが,こちらの手法もあまり意味があるとは思えません。ボットがウェブページを解析する際に,ページ上の全ての実体参照を一気にデコードしてしまえばエンコードされている文字数の多寡は問題にならないからです。
実体参照エンコードする手法は,賢くないボットに対しては有効ではあるでしょうが,それ以外のボットに対しては無効な手法です。おそらく現在では,スパムへの効果的な対策法とはならないでしょう。

メールアドレスを画像で表示する

文字で記述されるメールアドレスを,画像にしてしまうという方法です。
人は画像中の文字を簡単に文字として認識できますが,コンピュータにとってそれは非常に難しい作業です。このことは, captcha *1 がそれなりに有効であるとされていることからも分かると思います。
また,画像を解析するためには,文字列を解析するよりも多くのマシンパワーが必要です。たかだか1つのメールアドレスを取得するために多くの時間をかけてページ中の画像を片っ端から解析する,というのはコストにも時間にも見合わないのではないかと思います。1つのアドレスに時間をかけるぐらいなら,その時間を使って他のサイトへ情報収集しに行った方が多くのメールアドレスを集められるでしょう。
しかし,今後,画像からメールアドレスを抽出する効率的な方法が開発され無いとも限りません。そうなれば現在よくみかけるような,ゴシック体でメールアドレスが書かれた画像は意味を成さなくなり,captchaのように歪ませたアルファベットを使った画像が多くなってくるでしょう。また,メールアドレスを画像に変換するサービスがありますが,そのようなサービスで生成した画像というのは文字の配置やフォントがある制限されてしまうので,通常の画像よりも効率よくアドレスを抽出できるかもしれません。現在のところこの手法はそれなりに有効だと思われているが,将来にわたって有効であるとは限らない,ということです。
もう一つデメリットを挙げますと,画像を用いているので,アクセシビリティ的によくないということが挙げられます。画像を表示できない環境では通常,画像の代わりとなる代替テキスト(img要素のalt属性)の内容を参照することによってその画像についての情報を知ることができるのですが,メールアドレスを画像化したものですと,この手法が使えません。代替テキストとして画像中に表示されたメールアドレスを指定するのがHTMLの仕様上,最も正しい指定になると思うのですが,そのような事をするとアドレスを画像化した意味がなくなってしまいます。じゃあ画像が表示できない環境ではどうすればいいのか,という話になりますが,このような場合,どうしようもありません。そのような環境の方にはメールアドレスを知らせることができない,ということになってしまいます。
多くの場合,問題にはならないのでしょうが,アクセシビリティに気を遣わなければ成らないサイトでは使わない方が良い手法であると言えるでしょう。

メールアドレスの一部を置き換える

メールアドレス中の文字を適当な文字に置き換える方法です。画像化する方法と並んで(より多く?)用いられている手法です。
手法自体は非常に単純です。「hoge@example.com」と書くところを「mail: hoge at example.com」などと書き直します。人が見れば十分意味は伝わるでしょう。ただし,このままだと「mail:」という文字列からその直後に続くものがメールアドレスであると容易に特定されてしまいそうなので,いくらか改善は必要かも知れません。例えば,日本人向けのサイトなら「あっと」「どっと」といった平仮名やカタカナを用いると海外のボットが解析しにくくなるでしょう。
この手法は,いくらでも解析を難しくすることができます。文字列の取り得るパターンがいくらでも増やせるからです。例えば「メールは『ほへげ あっと えへくへざんへぷる どっへと こへむ』から『へ』を取り除いてアルファベット化」等と言った文章を解析するのは画像を認識するのと同じくらい(もしかしたらそれ以上に)難しい作業です。やり方によっては非常に有効な手法であると言えるでしょう。これらの文章は画像ではなく普通のテキストなので,テキストブラウザ対策もバッチリです。
ただし,サイト管理者にメールを送る側からすると,一手間かけなければいけない分,面倒な方法であるとも言えます。「利用者に対して優しいウェブ」なんていう目標を設定していると,その目標から遠ざかることになるかもしれません。気にしすぎかもしれませんが。

強力なスパムフィルタを利用する

一番楽な手法がこれ。Gmailなどのスパムフィルタに頼る。それだけ。
実際のところ,この手法がかなり有効であることは身を以て体感しています。というのも,以前大学のサークルのウェブサイトを管理していたのですが,ページ中に自分のメールアドレスを誤って掲載してしまっていました。その後その誤りは訂正されることなく,後輩に管理を引き継いで3年経った今も掲載され続けているのですが,スパムメールを鬱陶しく感じるということはあまりありません。サークルのウェブサイトは独自ドメインを所持しており,それなりにアクセス数もあるのですが,フィルタから漏れるメールは多くありません。アクセス数が更に多くなるとまた違った状況になるのかもしれませんが,普通の人,普通のアクセス数のサイトに載せるメールアドレスならこれで十分対策できるでしょう。
年々スパムメールスパムフィルタから逃れる手法というものが研究されているのでしょうが,Googleが頑張って対策してくれるので自分は何もしなくても良く,非常に楽です。
問題点は,Gmail以外のアドレスを使っている場合にスパムフィルタが利用できないことです。メールを転送してGmailスパムフィルタだけを利用することで同じような状況を実現することができるらしいのですが,なんの問題もなく設定できるかは不明です。
また,Gmailではなくメールソフトなどのスパムフィルタ機能に頼る方法もあります。こちらはスパムフィルタの精度がどの程度かは完全にソフトに依ってしまいます。また,スパムの情報を共有するということが行えないので,精度はGmailなどのウェブサービスには劣ってしまうかもしれません。逆にソフトウェアに搭載されているスパムフィルタで十分なフィルタリング精度が出せるのであれば,メールアドレスを自由に選択できるという点でウェブメールを上回ることになります。

メッセージ投稿用のフォーム(ウェブ拍手など)を使う方法

メールアドレスをサイト上に直接掲載するのではなく,メールフォーム等を設置して,メッセージを送れるようにするという方法もあります。この方法も,captchaのような,コンピュータと人間を識別するような仕組みを取り入れれば十分スパム対策になります(しかもアドレスを本文中に記述するよりも自由度の高い識別方法を採用できる。なぞなぞなど)。また,利便性・アクセシビリティ・アドレス選択の自由それぞれをそれなりに高いレベルで満たすことができます。さらに,メールアドレスそのものを公開しないので,スパムが増えてきたりした場合に,メールフォームを撤去してしまうことで一切のスパムを拒否することができる,という利点があります。
欠点としては,他の手法と比べて導入の敷居が高いことが挙げられます。メールフォームを設置しなければいけないので,cgiが使えるウェブサーバでないといけません(レンタルサービスもあるようですがそれでも設置できない場合はある)。また,メッセージを送る方の利便性も多少損なわれてしまいます(メーラー付属のスペルチェック機能が使えない,署名が使えない,など)。
いくらか欠点はありますが,連絡手段にメールを用いることにこだわらないのであれば良い選択肢ではないでしょうか。

まとめ

表にしてみました。

利用者の利便性 アクセシビリティ スパム対策度 アドレス選択の自由
実体参照 ×
画像化 ×
文字の置き換え △〜○
スパムフィルタ(ウェブメール) ×〜○ ×
スパムフィルタ(ソフトウェア) ×〜○
メールフォーム

利用者の利便性というのは,メールを出す人がどれだけ手間をかけなければならないか,ということを評価しています。リンクを1クリックでメーラが起動するなどできる為,リンク形式でページ中に記述するのが最も手軽であると思います。また,画像化がアドレスを1文字1文字打ち込まなければ成らないことに対し,文字の置き換えはページ中のアドレス部分をコピーして一部分を書き換えればメールアドレスになる,という意味で評価付けしています。
スパムフィルタに関しては,目にするスパムの量はたしかに減るかも知れないが,ウェブ全体を流れるスパムの量は減らない,むしろ他の手法に比べて届くスパムの量自体は増えるかもしれない,という意味で「スパム対策度」は○の評価となっています。
結局どの手法も一長一短ありますので,最終的にどれを採用するかは結局個人の好みの問題になってしまいます。とはいえ,スパムを送信する側の技術力も日々向上しているであろうことを考えると,それらへの対策を人任せにできるウェブメールを使うのが楽でいいんじゃないかな―と個人的には思います。
それから,最終手段にして究極の手段である,連絡手段を一切公開しないという方法がありますが,今回は考慮にいれませんでした。しかし,最近では連絡手段を公開しない場合でも,分かりやすいメールアドレス*2を使っている場合スパムメールが届くことがあるとか…。恐ろしい世の中です。

*1:画像中に書いてある文字列を入力させることによって,コンピュータなのか人なのかを見分ける手法。ウェブサービスに登録する際によく見かける。

*2:webmaster@hogehoge.comなど