ホームページ上でメールアドレスを公開していると、毎日何百通とスパムメール(迷惑メール)が届きます。ウイルスメールは全てサーバ上で削除されるようにしているので、ウイルスメールがどれぐらい届いているかはわかりませんが、スパムメールは本当によく届きます。
● 「百害あって一利なし」のスパムメールこれだけ多いと、スパムメールかそうでないかの判断に相当の時間を毎日費やされることになりますし、また、スパムメールでないものを間違って削除してしまう危険性もそれだけ増します。また、そのようなミスを犯してしまわないかと、非常に神経をすり減らす結果になります。そうして、迷惑メールの大半が出会い系サイトからの「やらせてあげますから」メールであり、間違って読んでしまうと非常に不快な内容ばかりです。まさに、「百害あって一利なし」状態なのですが、このスパムメールの量を減らすにはどうしたらいいでしょうか? もちろん、ウイルスメールのようにサーバ上で自動判別して削除させる手もあるのですが、これは誤判定の可能性を考えるとなかなかできません。迷惑メールかどうか判別だけをさせて(Gmailの活用やウイルスバスター2006の活用などで。)、最終判断は人間がまとめてするという形が一番現実的だと思いますが、このやり方はスパムメールの絶対量を減らすことにはつながりません。これが欠点です。 ホームページ上にメールアドレスを公開しなければもっとも確実なのでしょうが、そうもいかない場合も多いです。そこで、いくつか迷惑メールをあまり受信しなくて済むメールアドレス公開法を考えていきたいと思います。 ● スパムメール送信業者はどうやってメールアドレスを集めている?大前提として、スパムメールの送信業者というのは、そういう出会い系サイトのオーナーたちなのですが、彼らはメールアドレスのリストを購入しているわけです。では、そのようなリストを販売している人はどうやってメールアドレスを集めているかと言えば、ロボット(自動巡回プログラム)によって自動収集させているわけです。決して、生身の人間が、適当にネットで調べ物をしながら、メールアドレスらしきものを見つけたら、どんどこ、メモ帳やExcelなどに保存していくというような原始的方法は使っていません。少なくとも、そのようなやり方は主流ではありません。サーチエンジンの自動巡回ロボットが毎日世界中のサイトを訪問し、その内容をデータベースに登録していっているのと同じように、このスパムメール送信用のメールアドレス収集部隊ともいうべき巡回ロボットが訪問してきているのです。このようなロボットは、HTMLソースを分析し、メールアドレスらしきもの(@があって、その前後に半角英数字が並ぶもの。)をどんどん記録していきます。 ですから、このロボットに読み取れないような形であれば、スパムメールの受信量は劇的に減る可能性があるといことになります。(ただし、人間にも読み取れない形にしますと、メールアドレスを公開していないと同じことになりますので、たまたまスパムメールの業者(人間)があなたのサイトを訪問し、メールアドレスを記録していく可能性はなくなりません。当たり前の話ですが、念のため。) ● 対策1:メールアドレスを画像にするのようにしておけば、一般的なレベルのロボットであればまず読み取れません。人間だけがメールアドレスを認識できますが、この欠点は、いざメールで問い合わせしようとした無実の第三社がタイプミスをしてしまって、メールアドレス間違いからメールを送信できないトラブルに巻き込まれる可能性があることです。また、フォントによっては、「0」(ゼロ)と「O」(オー)、「1」(いち)と「l」(エル)の区別が難しい場合も十分にありえます。 しかし、だからといって、 <a href="mailto:info@broadband-xp.com"><img src="gazou.gif" width=186 height=63></a>と書いてしまえば、元の木阿弥です。 ● 対策2:「@」(アットマーク)だけを全角文字にする「メールは、info@broadband-xp.comまで(@は半角に書き換えてください)。」のように、アットマークのみ全角文字にします。たしかに、これであれば、半角の「@」をメールアドレス出現の目印として設計されているメールアドレス収集プログラムに対しては対抗できます。しかし、少し、プログラムを変えられて、全角のアットマークもメールアドレスとして認識されるようになれば、やっぱりスパムメールは大量に受信することになります。 また、サイト訪問者に@を書き換えさせるという作業をお願いしなければならないため、その点が難です。初心者だと何をお願いされているか分からない可能性があります。 ● 対策3:数値参照文字を使い、「@」を「@」と表記する(HTMLエンティティ化)HTMLソースの中で「メールは、info@broadband-xp.com まで。」と書いておけば、「メールは、info@broadband-xp.com まで。」と表示されるようになり、メールを書きたい人はメールアドレスの部分だけをコピーできます(これが対策1の画像化との大きな違い)。また、コピーした後、ユーザーが文字列の一部を変更しなければならない作業も発生しません(対策2との違い)。また、対策2の場合と同様に、「@」がアットマークのことだということがプログラムの中に組み込まれてしまえば、メールアドレスを収集される危険性はなくなりません。これが欠点です。では、@以外の英数字も全て数値参照文字にしてしまった場合を考えてみましょう。 のようなHTMLソースにするということです。 このソースを実際にHTMLソースに貼り付けますと、下記のようになります。 info@broadband-xp.com 実際にリンクをクリックしていただけば、正しく動作していていることを確認していただけるはずです。 ても、下記のような変換テーブルは簡単に作れるため、比較的突破されやすいです。
ただ、この数値参照文字方式(所謂「HTMLエンティティ化」)でも十分効果があると思われる方は、下記の変換プログラムを使ってメールアドレスを変換してみると良いでしょう。 |
● 対策4:JavaScriptを使ってメールアドレスをエンコード(疑似暗号化)する対策3の数値文字参照を使うやり方と原理は一緒ですが、メールアドレスに使われている英数字をASCII値に変換します。それをString.fromCharCode()を使って、元の英数字からなるメールアドレスに戻します。後は、document.writeでメールアドレス部分を出力すればいいのですが、「mailto:」などのキーワードを使ってメールアドレスらしきものを検索されたりすると困りますので、一応分割してあります。▼ 例3のJavaScriptを実際にソースに貼り付けた例 ここにある、上記の変換テーブルを見ても分かりますように、「105」という数字は結局は「i」のことであり、「110」という数字は、「n」のことです。この変換テーブルは全世界共通のため、見破られやすいということであれば、二通りの対策があるかと思います。 まず、「var em=String.fromCharCode(105,110,102,111,64,98,114,111,97,100)+String.fromCharCode(98,97,110,100,45,120,112,46,99,111,109);」の部分は単純に外部ファイル化する(JSファイル化)ことも対策になります。 また、「104」という数字を与えられたら、1を足して、「105」という数字に対応する文字をdocument.writeするように、1個ずつずれるように変換するというような単純な変換でも、十分な対策になります。サンプルは下記のようになります。 ▼ 例4のJavaScriptを実際にソースに貼り付けた例 単純に、上記ソースの中の「String.fromCharCode(104,109,101,110,63,97,113,110,96,99)+String.fromCharCode(97,96,109,99,44,119,111,45,98,110,108);」しか見ていないと、「hmen?aqn`ca`mc,wo-bnl」という文字列にしか変換できません。これが1個ずつ、ASCII値がずれてはじめて、「info@broadband-xp.com」となるという訳です。もちろん、全部1個ずつずらすという単純なルールではなくて、もっと複雑にすることも可能でしょう。例えば、前から数えて何文字目かで判断して、3で割り切れる場合は1個ずれるけれど、それ以外の場合は3個ASCII値がずれるようにするとか、いろいろできるはずです。 ※ LinuxのブラウザであるKonqueror(ユーザーシェア0.1%未満)には、JavaScriptに重大なバグがあり、Shift_JISのページでエスケープ文字の「\」(バックスラッシュ)が利用されていると、エスケープ文字として解釈されないために、不具合が発生します。そのため、Konquerorのことを考えるのであれば、「\」が出現しないで済むように、ダブル・クォートとシングル・クォートをうまく使わなければなりません。(参照:Konquerorとエスケープ文字(JavaScript謎のエラーを解く)) 具体的には、例4サンプルの document.write("メールは、<a href=\"mai"+"lto:"+em+"\">"+em+"</a> まで。"); の部分を document.write('メールは、<a href="mai'+'lto:'+em+'">'+em+'</a> まで。'); とします。 ▼ 例4のJavaScriptをKonqueror向けに修正したものを、実際にHTMLソースとして貼り付けた例 いずれにせよ、メールアドレスから、例4のようなJavaScriptを作成するのは、それほど簡単ではありません。そこで、簡単にソースを作成できますようにしたものが、下記です。メールアドレスを入力していただき、「変換ボタン」をクリックするだけです。JavaScriptで変換しているだけですから、弊社サーバには一切の情報は送信されません。ご安心ください。 ただし、この「対策4」には重大な欠陥があります。お気づきの人も多いでしょうが、このままでは、JavaScriptをoffにされているユーザーには、何も表示されないのです。かといって、 と真っ正直に書いていたら、最初から対策していないのと同じです。 では、どうすればいいかといいますと、JavaScriptをoffにしている人に対しては、あまり良い解法とは言えないと思われていた対策1を使うようにしますます。すなわち、 のようにして、「mailto.gif」の中にメールアドレスを書いておくようにします。フォントによっては、「0」(ゼロ)と「O」(オー)、「1」(いち)と「l」(エル)の区別が難しい場合もやはり出てきますが、対策1と違って、全ての人にその判読が簡単でないメールアドレスを読ませるのではなく、約3%ほどの人だけがそういう不自由な環境を強いられることになる点が違います。圧倒的大多数(約97%ほど)の方はJavaScriptをonにされていて、問題がないため、妥協できるレベルではないでしょうか? なお、対策3の数値参照文字を使う場合(HTMLエンティティ化)も、対策4のJavaScriptを使う場合も、どのブラウザ・どのメールソフトでも大丈夫なのか心配なところだと思いますが、テストした限りでは、動作しないメールソフトはありませんでした。) <<動作確認済みブラウザ及びメールソフト一覧(対策3及び対策4)>> 数が多くなってきたので別ページにまとめました。参照:メールソフトのシェア(各種調査リンク集) |
● 対策5:専用ソフトを使ってHTMLソース全体を暗号化するサンプル3もしくはサンプル4の場合はメールアドレスだけを暗号化しましたが、HTMLソース暗号化ソフト「SHTML」を使えば、メールアドレスだけでなくHTMLソース全体を暗号化できるため、ロボットによるメールアドレス収集に対して、強力に対抗できます。ただし、単にスパムメール対策のためだけに、HTMLソース全体を暗号化してしまうと、SEOの観点やメンテナンスの簡便性の観点からデメリットが大きすぎますね。画像の保護や、コンテンツを印刷されたくない、コピーされたくないという目的であれば、ついでにスパム対策にもなるHTMLソースの暗号化はお勧めですが、そうでない場合は避けるべきだと思います。 ● 対策6:メールアドレスの公開をやめる(CGIフォームを使う)当たり前と言えば当たり前ですが、メールアドレスをホームページ上に公開しなければ、スパムメールの餌食になる可能性は激減します。問合わせメールはmailtoタグでメールを送ってもらうのではなくて、CGI経由で送ってもらいます。これであれば、送り先のメールアドレスを公開する必要がありません。CGI経由で受け取ったメールに対して返信すれば、差出人のメールアドレスは受信者に分かってしまいますが、スパムメール業者がそこまで面倒なことをするのは稀と思われ、CGIフォームはかなり有効であると思われます。 なお、たまに、問合わせメールの差出人メールアドレスを「送信専用メールアドレス」と称して、「返信いただいてもお答えできません。問い合わせは、ご面倒でもWEBフォーム上から再度お願いします。」などとして、リファレンス番号さえメールにつけずに送ってくる会社がたまにいますが、これはユーザービリティーの観点から最低と思われます。やりすぎです。ここまでやるのはやめましょう。 ● まとめ
'); d.write(' '); //ibm d.write(''); d.write(' '); //日立 d.write(''); d.write(' '); //ラピッドサイト d.write(''); //kagoya d.write(' '); d.write(''); //interq d.write(' '); d.write(''); //日本語教師 d.write(' '); d.write(''); d.write(''); } // --> |