目次
2003年9月に入って、この「自宅サーバーWebRing(ウェブリング)」のメールアドレスへも、迷惑メールが多く届く様になりました。HTMLの書式上、Webページにメールアドレスを記載しなければなりません。また、掲示板への投稿時にも文責を負うために基本的には、メールアドレスを記載しなければなりません。
以上のことを逆手に取って、Webページ上のアンカー(ハイパーリンク)を次々とたどって、メールアドレスを収集するクローラが、横行する様になりました。メールアドレス収集ソフトにWebページ上のメールアドレスを収集されない方法は、「【個人ユーザのspam防御方法】(office)」さんのサイトに示されている様にフォームメールを利用する等、色々ありますが、ここでは、メールアドレスへのリンクをHTMLエンティティ出力形式に変更する方法を紹介します。
このWebページは、HTMLエンティティ生成を参考(reference)にして作成し、これを動的Webページ(CGIファイル)のメールアドレスの保護について拡張したものです。参考にしたWebページと重複する内容については極力記載していませんので、この参考ページをご熟読されてから、以下の内容をご一読願います。
尚、フォームメールでも保護できない動的ファイル(一般的な掲示板等)への簡単な改造方法も記載します。
注)メールアドレスへのリンクをHTMLエンティティ出力形式に変更した場合、Another HTML-lintさんのサイトで、HTMLの文法を採点しますと、100点満点が取れなくなりますことをご留意願います。
こちらのHTMLエンティティ生成というフリーソフトを利用して、メールアドレスやメールアドレスへのアンカー
<a href="mailto:webring-sample@sakaguch.com">鷹の巣</a>を
<a href="mailto:webring-sample@sakaguch.com">鷹の巣</a>
の様に変更してしまいます。メールアドレス収集ソフトが対応すれば効果がなくなりますが、メールアドレス収集ソフトに負担を強いることになり、機能を低下させることになります。特別に記載する内容ではないかもしれませんが、私の行なっている手順(方法)を以下に説明します。
全WebページをWebサーバーより、ダウンロードする。
HTMLエンティティ生成というフリーソフトを利用して、自サイトで使用しているメールアドレスやメールアドレスへのリンクをHTMLエンティティ出力形式に変更し、変更後のメールアドレスへのリンクを控える。
複数のHTML&テキストファイル内を一括置換TextSSというフリーソフトを利用して、ドキュメントルート以下の全htmlファイルのメールアドレスへのリンク部分をHTMLエンティティ出力形式に一括置換する。 Webページの文字コードがUTF-8であれば、Repl-Ace(リプル・エース)等を利用して一括置換する。
変更したWebページをWebサーバーにアップロードする。
上記のソフトの使用に慣れていれば、変更に要する時間は、短時間で、一丁上がりです。
ここでは、CGIを利用した動的WebページでのCGIの改造方法について簡単に説明します。
前出のソフトを利用して、あらかじめ、CGIに負担をかけないように「mailto:」だけをあらかじめ、HTML出力形式に置換しておきます。メールアドレスやメールアドレスへのアンカー
<a href="mailto:webring-sample@sakaguch.com">鷹の巣</a>を
<a href="mailto:webring-sample@sakaguch.com">鷹の巣</a>
に変更する様にCGIを改造します。
掲示板に代表されるCGIには、投稿者のメールアドレスを記載する欄が設けられていています。メールアドレスを収集するクローラは、これらの動的Webページへもやって来て収集します。動的Webページ(CGIファイル)でのメールアドレスの変更は、CGIで対処することになります。メールアドレスへのアンカー部分の「mailto:」と「@」だけをHTML出力形式に置換するだけでも効果があると考えます。尚、過去ログなどには、投稿者のメールアドレスを記載する必要がないと考えますので、過去ログなどの投稿者のメールアドレスは、全て削除しましょう。
メールアドレスのアンカー(ハイパーリンク)を簡単にHTMLエンティティ出力形式に変更している簡単なPerlスクリプトの例を以下に示します。このスクリプトは、アンカーだけの書き換えです。アンカー以外でもメールアドレスが書かれている場合もありますので、CGIが出力するHTML本文内の「@」も全て「@」に置換されることを推奨します。
メールアドレスのリンクの一部をHTMLエンティティ化するperlスクリプト例
#!/bin/perl # メールアドレス収集ソフトに負担を強いるCGI用perlスクリプト # 目的:不特定多数によるCGIへのメールアドレス書き込みに対して、 # メールアドレス収集ソフトに収集されにくくするperlスクリプトの例です。 # HTMLエンティティ生成 # http://ab.jpn.ph/soft/html_rand.html # にて、mailto: を ランダムにエンティティ出力形式に変換して、置換後の文字列を設定する。 $mailto = "mailto:"; $email ="webring-sample\@sakaguch.com"; $ename = "鷹の巣"; $email_link = &email_link ( $mailto , $email , $ename ); print "$email_link\n"; exit; # # [メールアドレスのエンティティ化] # sub email_link { my ( $mail_to , $e_mail , $e_name ) = @_; $e_mail =~ s/@/@/g; # @を@(HTMLエンティティ出力形式)に置換 注2 $mail_to_entity = "<a href=\"$mail_to$e_mail\">$e_name</a>"; return $mail_to_entity; }
注)
perlのHTML::Entitiesモジュールを使用する場合と、使用しない場合のスクリプト例を下記に示します。プロバイダWAKWAKでは、残念ながら「use HTML::Entities;」は使用できませんでした。自宅サーバーでperl5.8以降でしたら、使用できるはずです。
メールアドレスのリンクの全部をHTMLエンティティ化するperlスクリプト例(HTML::Entitiesモジュールを使用)
#!/bin/perl
# メールアドレス収集ソフトに負担を強いるCGI用perlスクリプト
# 目的:不特定多数によるCGIへのメールアドレス書き込みに対して、
# メールアドレス収集ソフトに収集されにくくするperlスクリプトの例です。
use HTML::Entities;
# メールアドレスをHTMLエンティティ出力形式に変換する。
# 参考URL http://ab.jpn.ph/soft/html_rand.html
# 1=変換する、0=変換しない
$mail_entity = 1;
$email ="webring-sample\@sakaguch.com";
$ename = "鷹の巣";
$email_link = &email_link ( $email , $ename );
print "$email_link\n";
exit;
#----------------------------------------------------#
# メールアドレスのリンクをHTMLエンティティ表示にする #
#----------------------------------------------------#
sub email_link {
my ( $e_mail , $e_name ) = @_;
my $mailto;
if ($mail_entity) {
encode_entities($e_mail ,"\x00-\xff");
$mailto = "mailto:$e_mail";
} else {
$mailto = "mailto:$e_mail";
}
return "<a href=\"$mailto\">$e_name</a>";
}
メールアドレスのリンクの全部をHTMLエンティティ化するperlスクリプト例(HTML::Entitiesモジュールを未使用)
#!/bin/perl
# メールアドレス収集ソフトに負担を強いるCGI用perlスクリプト
# 目的:不特定多数によるCGIへのメールアドレス書き込みに対して、
# メールアドレス収集ソフトに収集されにくくするperlスクリプトの例です。
# メールアドレスをHTMLエンティティ出力形式に変換する。
# 参考URL http://ab.jpn.ph/soft/html_rand.html
# 1=変換する、0=変換しない
$mail_entity = 1;
$email ="webring-sample\@sakaguch.com";
$ename = "鷹の巣";
$email_link = &email_link ( $email , $ename );
print "$email_link\n";
exit;
#----------------------------------------------------#
# メールアドレスのリンクをHTMLエンティティ表示にする #
#----------------------------------------------------#
sub email_link {
my ( $e_mail , $e_name ) = @_;
my $mailto;
if ($mail_entity) {
$mailto = 'mailto:';
for ( 0 .. length($e_mail)-1 ) { $mailto .= '&#' . ord ( substr ( $e_mail , $_ , 1 ) ) . ';'; }
} else {
$mailto = "mailto:$e_mail";
}
return "<a href=\"$mailto\">$e_name</a>";
}
注)
以下の手順で確認します。
メールアドレスを収集するクローラを作っているサイトから、試用版をダウンロードします。試用版は、メールアドレスの収集数が20個までに制限されているものがほとんどですが、確認用としてはこれで十分です。
このメールアドレス収集ソフトに自サイトのトップページのURLを入力し、自サイト内の全てのWebページから、メールアドレスを収集させます。
ここで、1つでもメールアドレスが収集されたら、不合格です。もう一度、見直しが必要です。HTMLファイルの「@」は、無条件に全て「@」に置換されることを推奨します。
関連情報:
冒頭にも述べましたが、このWebページで説明しています方法は、メールアドレス収集ソフトがHTMLエンティティ出力形式に対応した時点で、何の効果もなくなります。逆に言えば、少数派であれば、メールアドレス収集ソフトがHTMLエンティティ出力形式に対応しないと考えられます。
40Mbpsの帯域の回線を使用してメールアドレス収集ソフトの試用版を試すとわかりますが、驚くほど高速にWebページのアンカーをたどって、メールアドレスを収集してきます。GHz級のPC機を使用すると何とも言えませんが、メールアドレス収集ソフトがHTMLエンティティ出力形式に対応するとかなり収集速度が低下するのではないでしょうか。その意味でも実施して無駄ということにはなりませんので、是非、実施して頂きたいと考えます。
このWebページは、私自身(鷹の巣)の必要性に迫られて、作成しました。不明点や不具合点がありましたら、掲示板で、ご指摘を願います。
このWebページと同じ内容の様な動的Webページ(CGIファイル)のメールアドレスの変更方法のWebページが、2004年01月18日以前にございましたら、お知らせ願います。その際は、謝辞にリンクを追記させて頂きます。
|先頭|自宅サーバーWebRing(ウェブリング)ホームページへ戻る|