ロボットを欺け!安全なメールアドレスの記述方法

小さい方の入力エリアにあなたのメールアドレスを入力して、変換ボタンを押してください。すると、JavaScriptのコードが下の入力エリアに吐き出されます。


出力されたコードはブラウザに「mailto:(メールアドレス)」へジャンプさせる命令です。後で使うので、次に行きます。ソースを開き、メールアドレスが記述してある部分を探します。

<a href="mailto:hoge@localhost.jp">メール送ってね</a>

上の例の赤文字部分を次のように書き直します。

<a href="JavaScript:">メール送ってね</a>

ここでようやく出力された文字列の出番です。先ほど変更した「JavaScript:」のすぐ右に、出力された文字列を貼付けます。

<a href="JavaScript:eval(String.fromCharCode(108,111,...中略...,34));">メール送ってね</a>

貼付けできたらすぐに保存して、ブラウザで確認しましょう。こうなります。

このアドレスにメールは送らないでね

リンクにポイントしても、ステータスバーにはJavaScriptの構文が表示されるだけでこれでメールが送れるの?と思うかもしれません。しかし、クリックするとコードが実行され、Unicodeで符号化された数字の羅列が文字列に復号されます。復号された文字列もまた命令なのでブラウザがメーラーを呼び出します。この方法はメールアドレス部分を単純に数値参照(&#64; の形)に置き換えるのと比べれば、ずっと安全です。しかし、絶対ではないということを付け加えておきます

しかし絶対ではなくとも、少しでもロボットの目を欺こうとする努力はできます。次は私のサイトで実際に使用している方法です。Unicodeで符号化されたデータをぶつ切りにし、それぞれ復号した後にくっつけています。その上で、必要な場所から関数で呼んでいます。どうせここまでやるなら、スクリプトは外部ファイルとして別の場所に置くほうがいいでしょう。当然ながら、メールアドレスは途中で切れ目が入るようになっています。

<script type="text/javascript">
<!--
function tegami(){
	var ma1,ma2,ma3,ma4;
		
	ma1 = String.fromCharCode(108,111,99,97,116,105,111,110,46,104,114,101);
		//location.hre
	ma2 = String.fromCharCode(102,32,61,32,34,109,97,105,108,116);
		//f = "mailt
	ma3 = String.fromCharCode(111,58,104,111,103,101,64,108,111,99,97);
		//o:hoge@loca
	ma4 = String.fromCharCode(108,104,111,115,116,46,106,112,34);
		//lhost.jp"
	
	eval(ma1 + ma2 + ma3 + ma4);
	//evalは文字列を命令として実行させる
	//本来は文字列を数値に変換するメソッド
	}
-->
</script>


<a href=http://www.geocities.jp/server-errors/not_found.htmlメールを送る</a>

ちなみにこの方法でリンクを張ると

このアドレスにメールは送らないでね

という感じになります。

別館インデックスに戻る