目次登録サイト一覧 01 02 03 04 05 06 07 08 09 10 11ログ情報連絡用掲示板
作成日:2004年01月18日、改定日:2005年02月27日 リング管理者:鷹の巣

メールアドレスの保護(メールアドレス収集ソフトに負担を強いる)

目次

  1. 概要
  2. 静的Webページ(htmlファイル)のメールアドレスの保護
  3. 動的Webページ(CGIファイル)のメールアドレスの保護
    1. メールアドレスのリンクの一部をHTMLエンティティ化
    2. メールアドレスのリンクの全部をHTMLエンティティ化(2004.07.09追記)
  4. その他

    更新履歴  謝辞

1. 概要

2003年9月に入って、この「自宅サーバーWebRing(ウェブリング)」のメールアドレスへも、迷惑メールが多く届く様になりました。HTMLの書式上、Webページにメールアドレスを記載しなければなりません。また、掲示板への投稿時にも文責を負うために基本的には、メールアドレスを記載しなければなりません。

以上のことを逆手に取って、Webページ上のアンカー(ハイパーリンク)を次々とたどって、メールアドレスを収集するクローラが、横行する様になりました。メールアドレス収集ソフトにWebページ上のメールアドレスを収集されない方法は、「【個人ユーザのspam防御方法】(office)」さんのサイトに示されている様にフォームメールを利用する等、色々ありますが、ここでは、メールアドレスへのリンクをHTMLエンティティ出力形式に変更する方法を紹介します。

このWebページは、HTMLエンティティ生成を参考(reference)にして作成し、これを動的Webページ(CGIファイル)のメールアドレスの保護について拡張したものです。参考にしたWebページと重複する内容については極力記載していませんので、この参考ページをご熟読されてから、以下の内容をご一読願います。

尚、フォームメールでも保護できない動的ファイル(一般的な掲示板等)への簡単な改造方法も記載します。

注)メールアドレスへのリンクをHTMLエンティティ出力形式に変更した場合、Another HTML-lintさんのサイトで、HTMLの文法を採点しますと、100点満点が取れなくなりますことをご留意願います。


2. 静的Webページ(htmlファイル)のメールアドレスの保護

こちらのHTMLエンティティ生成というフリーソフトを利用して、メールアドレスやメールアドレスへのアンカー

<a href="mailto:webring-sample@sakaguch.com">鷹の巣</a>を
<a href="&#x6D;ai&#x6C;&#116;o&#x3A;webring-sample&#64;sakaguch.com">鷹の巣</a>

の様に変更してしまいます。メールアドレス収集ソフトが対応すれば効果がなくなりますが、メールアドレス収集ソフトに負担を強いることになり、機能を低下させることになります。特別に記載する内容ではないかもしれませんが、私の行なっている手順(方法)を以下に説明します。

  1. 全WebページをWebサーバーより、ダウンロードする。

  2. HTMLエンティティ生成というフリーソフトを利用して、自サイトで使用しているメールアドレスやメールアドレスへのリンクをHTMLエンティティ出力形式に変更し、変更後のメールアドレスへのリンクを控える。

  3. 複数のHTML&テキストファイル内を一括置換TextSSというフリーソフトを利用して、ドキュメントルート以下の全htmlファイルのメールアドレスへのリンク部分をHTMLエンティティ出力形式に一括置換する。 Webページの文字コードがUTF-8であれば、Repl-Ace(リプル・エース)等を利用して一括置換する。

  4. 変更したWebページをWebサーバーにアップロードする。

  5. 上記のソフトの使用に慣れていれば、変更に要する時間は、短時間で、一丁上がりです。

3. 動的Webページ(CGIファイル)のメールアドレスの保護

ここでは、CGIを利用した動的WebページでのCGIの改造方法について簡単に説明します。

前出のソフトを利用して、あらかじめ、CGIに負担をかけないように「mailto:」だけをあらかじめ、HTML出力形式に置換しておきます。メールアドレスやメールアドレスへのアンカー

<a href="mailto:webring-sample@sakaguch.com">鷹の巣</a>を
<a href="&#x6D;ai&#x6C;&#116;o&#x3A;webring-sample&#64;sakaguch.com">鷹の巣</a>

に変更する様にCGIを改造します。

掲示板に代表されるCGIには、投稿者のメールアドレスを記載する欄が設けられていています。メールアドレスを収集するクローラは、これらの動的Webページへもやって来て収集します動的Webページ(CGIファイル)でのメールアドレスの変更は、CGIで対処することになります。メールアドレスへのアンカー部分の「mailto:」と「@」だけをHTML出力形式に置換するだけでも効果があると考えます。尚、過去ログなどには、投稿者のメールアドレスを記載する必要がないと考えますので、過去ログなどの投稿者のメールアドレスは、全て削除しましょう。

メールアドレスのアンカー(ハイパーリンク)を簡単にHTMLエンティティ出力形式に変更している簡単なPerlスクリプトの例を以下に示します。このスクリプトは、アンカーだけの書き換えです。アンカー以外でもメールアドレスが書かれている場合もありますので、CGIが出力するHTML本文内の「@」も全て「&#64;」に置換されることを推奨します。

3.1 メールアドレスのリンクの一部をHTMLエンティティ化

メールアドレスのリンクの一部をHTMLエンティティ化するperlスクリプト例

#!/bin/perl

# メールアドレス収集ソフトに負担を強いるCGI用perlスクリプト

# 目的:不特定多数によるCGIへのメールアドレス書き込みに対して、
#    メールアドレス収集ソフトに収集されにくくするperlスクリプトの例です。

# HTMLエンティティ生成
# http://ab.jpn.ph/soft/html_rand.html
# にて、mailto: を ランダムにエンティティ出力形式に変換して、置換後の文字列を設定する。
$mailto = "&#x6D;ai&#x6C;&#116;o&#x3A;";

$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/@/&#64;/g;                   # @を&#64;(HTMLエンティティ出力形式)に置換 注2
        $mail_to_entity = "<a href=\"$mail_to$e_mail\">$e_name</a>";
        return $mail_to_entity;
}

注)

  1. 赤字の部分が、HTMLエンティティ出力形式に置換している部分です。
  2. アンカー部分以外のHTML本文にもメールアドレスが記載される可能性もありますので、この行と同じ方法で、CGIが出力するHTML本文内の「@」も全て「&#64;」に置換することを推奨します。
  3. 一般的にCGIは、書き込まれるより、読み出される方が圧倒的に多いものです。抜本的なCGIの改造方法は、書き込み時にHTMLエンティティ出力形式に置換できるところは、置換すべきです。

3.2 メールアドレスのリンクの全部をHTMLエンティティ化(2004.07.09追記)

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 = "&#109;&#97;&#105;&#108;&#116;&#111;&#58;$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 = '&#109;&#97;&#105;&#108;&#116;&#111;&#58;';
                for ( 0 .. length($e_mail)-1 ) { $mailto .= '&#' . ord ( substr ( $e_mail , $_ , 1 ) ) . ';'; }
        } else {
                $mailto = "mailto:$e_mail";
        }
        return "<a href=\"$mailto\">$e_name</a>";
}

注)

  1. 赤字の部分が、HTMLエンティティ出力形式に置換している部分です。
  2. アンカー部分以外のHTML本文にもメールアドレスが記載される可能性もありますので、この行と同じ方法で、CGIが出力するHTML本文内も置換されることを推奨します。
  3. 一般的にCGIは、書き込まれるより、読み出される方が圧倒的に多いものです。抜本的なCGIの改造方法は、書き込み時にHTMLエンティティ出力形式に置換できるところは、置換すべきです。
  4. Kent WebさんのFantasy Boardの改造例は、UTF-8とは全く関係ないおまけの改造例(Kent WebさんのFantasy Boardの改造例)にあります。

4. 動作確認

以下の手順で確認します。

  1. メールアドレスを収集するクローラを作っているサイトから、試用版をダウンロードします。試用版は、メールアドレスの収集数が20個までに制限されているものがほとんどですが、確認用としてはこれで十分です。

  2. このメールアドレス収集ソフトに自サイトのトップページのURLを入力し、自サイト内の全てのWebページから、メールアドレスを収集させます。

  3. ここで、1つでもメールアドレスが収集されたら、不合格です。もう一度、見直しが必要です。HTMLファイルの「@」は、無条件に全て「&#64;」に置換されることを推奨します。

5. その他

  1. 関連情報:

  2. 冒頭にも述べましたが、このWebページで説明しています方法は、メールアドレス収集ソフトがHTMLエンティティ出力形式に対応した時点で、何の効果もなくなります。逆に言えば、少数派であれば、メールアドレス収集ソフトがHTMLエンティティ出力形式に対応しないと考えられます。

  3. 40Mbpsの帯域の回線を使用してメールアドレス収集ソフトの試用版を試すとわかりますが、驚くほど高速にWebページのアンカーをたどって、メールアドレスを収集してきます。GHz級のPC機を使用すると何とも言えませんが、メールアドレス収集ソフトがHTMLエンティティ出力形式に対応するとかなり収集速度が低下するのではないでしょうか。その意味でも実施して無駄ということにはなりませんので、是非、実施して頂きたいと考えます。

  4. このWebページは、私自身(鷹の巣)の必要性に迫られて、作成しました。不明点や不具合点がありましたら、掲示板で、ご指摘を願います。

  5. このWebページと同じ内容の様な動的Webページ(CGIファイル)のメールアドレスの変更方法のWebページが、2004年01月18日以前にございましたら、お知らせ願います。その際は、謝辞にリンクを追記させて頂きます。

更新履歴

謝辞

先頭自宅サーバーWebRing(ウェブリング)ホームページへ戻る


2004年1月18日よりページカウンタ頁配送。