System time 0.031250
マスターの独り言
<< スパム対策(その2) | 失敗(^-^; >> |
- スパム対策(その1)
-
【2007/01/20(土)】
[Web関連]
スパムっていやですよね。私の場合はGojuのWeb siteの関係からメールアドレスを公開しているのですが、最近はスパムが増え続け、一日に送られてくるスパムが3桁の大台に乗るのも間近となりました。
ある程度は仕方ないとは思っていたものの、ここまで増えると処理も大変です。
メーラーにフィルターを設けて選別していますが、時に問い合わせのメールまでスパムと判定されたりすることもあるので、結局自分でチェックしなければなりません。自分の目で確かめてもスパムかどうか判断に悩むものも時にはあります。これ以上スパムが増えると様々な支障をきたすのは明白です。
そこで、遅まきながら対策に乗り出すことにしました。
スパムメールの殆どはクローラーと呼ばれる自動巡回システムによって、Web siteからメールアドレスらしきものを収集しています。googleの検索情報収集のシステムもクローラーの一種で、ボットなどと言われています。
仮にメールアドレス収集用のクローラーが限定されているのなら、サイトに制限を設けてアクセスできないようにすることも可能ですが、様々なIPアドレスから様々な偽装工作をしてやってくるクローラーに完全に対処することは殆ど不可能です。制限を厳しくしていけば、google等の検索エンジンも弾いてしまうことになりかねません。
で、結局のところ、Web siteに記載されたメールアドレスを収集し難いものにする、という対策に落ち着くようです。
Netで調べてみたところ、やはり皆さん色々と苦労されているようでして、対策も様々ですね。
クローラーがアドレスを収集する仕組みは基本的にページのソースを読み込み、「<a href="mailto:〜〜@〜〜">」というタグや@(アットマーク)の前後の文字列をメールアドレスと見なしているわけですから、そのあたりを何とかすれば良いことになります。
その1:【メールアドレスをイメージにする】
比較的多いのが、アドレスをテキストではなく下記のようにイメージにしてしまうものです。
デメリットとしては、アドレスをコピーすることが出来ない為に書き写してもらう必要があり、個人のWeb siteならまだしも、アクセシビリティの関係から企業のWeb siteでは不向きといえます。
また、最近ではOCR技術の発展で画像からテキストを読み出す事も出来るクローラーがあるようですから、万全とは言え難くなっているようです。
その2:【アドレスの文字を一部変更、追加する】
これも比較的多いパターンです。@(半角)を@(全角)に変えてみたり、#などにして
abc-def#zyx.ab.jp(#を@に変えてください)
としたり、
abc-def@no-spamzyx.ab.jp(no-spamを取り除いてください)
とするようなものです。
これもアクセシビリティの点では今ひとつですし、自動的にno-spam等の怪しい文字列を取り除いたりするクローラーも有るとのことですから、対処法としてはあまりお勧めできないようですが、何もしないよりはマシだと言えます。
その3:【テーブルタグの利用】
これは<table></table>タグなどのブロックタグを利用してアドレスを分割するものです。
例えば
<TABLE border="0" cellpadding="0" cellspacing="0">
<TR style="font-weight: bold;">
<TD>E-MAIL : </TD>
<TD style="display: none;">@</TD>
<TD>goju</TD>
<TD>-</TD>
<TD>master</TD>
<TD>@</TD>
<TD>cafegoju</TD>
<TD>.</TD>
<TD>com</TD>
<TD style="display: none;">@</TD>
</TR>
</TABLE>とすれば、
E-MAIL : @ goju - master @ cafegoju . com @ のように表示されます。これをコピーすると間に余分なスペースが入ったり、上記の例では前後に@が入ったりすることがあるので但し書きが必要になります。アクセシビリティの面からはあまりお勧めは出来ませんね。
効果の方はどうなのでしょう?
タグを取り除いてしまえばそのままのアドレスを取得できてしまいますので、万全とは言えないかもしれませんが、上記の例のように文字列間に通常は表示されない形で適当な言葉を挟んでおく事である程度は対処できそうに思います。
その4:【アドレスをエンティティ(数値文字実体参照)化する】
その2のパターンに近いものですが、@マークなどを表示用特殊文字に変換して(エンティティ化)、ブラウザでは正常に見えても、ソースは別のものに見えるようにする方法です。
例えば、@は数値文字実体参照では「@」になりますので、
abc-def@zyx.ab.jp
とすれば、
abc-def@zyx.ab.jp
のように表示されるわけです。
コピーしてもそのまま使用できますし、<a href="mailto:〜〜〜">タグでも使用できますのでアクセシビリティの面では合格といえます。
しかし、最近はエンティティ化したものに対処する為、@のほかに「@」を検索対象に入れるものが増えてきてるということですから、効果は低いと言わざるを得ないようです。他の文字列までエンティティ化したとしても対応表を用いて変換されてしまえば同じ事ですので。
その5:【フォームメールを利用する】
企業のWeb siteなどに「お問い合わせのお客様は下記送信フォームよりお願い致します」などとあるもので、cgiのsendmailを利用し専用問い合わせフォームからのみメールを受け付けると言うものです。
メールアドレスが表に出る事はありませんし、フォームが使えないブラウザというものはありませんから、アクセシビリティに配慮した上である意味究極のスパム対策とも言えるかもしれません。
ただ、これにもいくつか問題点があります。
一つはだれでも簡単に設置することが出来るわけではないというものです。サーバー内で自由にcgiを動かせる環境であるならばフリーのフォームメールcgiを設置したり、perlが書ける人ならば比較的簡単に自作も出来ますが、cgiが使えなかったりスパムの温床となることを防ぐためにsendmailを利用できないようになっているレンタルサーバーもありますので汎用性があるとは言えません。
フォームメールのサービスを行っているところもあるようですので、それを利用するのも一つの手ではありますが、信用できるところでないと逆にメールアドレスを収集されてしまう可能性もありますので注意が必要となってきます。
他にも専用のフォームから送信するということは自分のメーラーから送ることが出来ないということですので、一々Web siteにアクセスしなければならない事を意味し不便とも言えます。
このあたりは送信フォームにメールアドレスを記載してもらうことにより、返信メールに実アドレスを載せれば対処できますが、記載されていたアドレスに不備があった場合などは連絡がつかなくなることも予想されるので、いらぬトラブルの元となる可能性は否めません。
これを防ぐには送信フォームを利用した際に自動的に投稿者のアドレスへメールを送信し、そこに記載されたワンタイムパスワードを設置したアドレスにアクセスしてもらう、というパターンも考えられます。
ただ、ここまでやると、正直やりすぎといった感がありますよねえ・・・。
なお、送信フォームが匿名であることから嫌がらせをされる可能性というのも考えられますが、連続投稿を許可しないなど、このへんはcgiの方で規制を掛けることも出来ますのでさほど心配は要らないかもしれません。
その6:【java scriptの使用】
一般にクローラーでは解析できないと言われているjava scriptを用いてメールアドレスを表示するものです。
<script type="text/javascript">
<!--
function email(){
var m = new Array();
m[0]=".";
m[1]="goju";
m[2]="-";
m[3]="cafe";
m[4]="master";
m[5]="com";
m[6]="@";
var mail = new String;
var mail2 = new String;
var mail3 = "mailto:";
var n = new Array(1,2,4,6,3,1,0,5);
for( var i = 0; i<8; i++ ){
mail += "<SPAN>" + m[n[i]] + "</SPAN>";
mail2 += m[n[i]];
}
document.write("E-MAIL : "+mail.link(mail3+mail2));
}
// -->
</script>というスクリプトをあらかじめhtmlファイルに書いておき、次のようにすればアドレスが表示されます。
<SCRIPT type="text/javascript">
<!--
email();
// -->
</SCRIPT>ただ、java scriptが無効になっている場合は表示されませんし、携帯からのアクセスでは見ることが出来ません。アクセシビリティの面では一部配慮に欠けると言えるかも知れません。
効果の方は現在ではそれなりに有効のようですが、最近ではjava scriptを解析するクローラーも出てきたとのことですから、いつまで効果を発揮するか分りません。
【そして・・・】
結局の所、どれも一長一短があり決め手に欠けるのですが、一般の方はjava scriptを有効にしているでしょうし、意図的に無効にしている方はそれなりの知識があるでしょうからjava scriptを用いてアドレスを表示することにしました。
実際には外部に.jsファイル(例えばemail.js)を作成し、必要な場所で呼び出す形になります。
.jsファイルは
try{
tStyle = document.getElementById("adrs").style;
tStyle.display = "none";
}catch(e){
}
var m = new Array();
m[0]=".";
m[1]="goju";
m[2]="-";
m[3]="cafe";
m[4]="master";
m[5]="com";
m[6]="@";
var mail = new String;
var mail2 = new String;
var mail3 = "mailto:";
var n = new Array(1,2,4,6,3,1,0,5);
for( var i = 0; i<8; i++ ){
mail += "<SPAN>" + m[n[i]] + "</SPAN>";
mail2 += m[n[i]];
}
document.write("E-MAIL : "+mail.link(mail3+mail2));という記述をしておき、メールアドレスを表示したい場所に次のように書き込みます。
当方への連絡は<a id="adrs" href="./address.html">こちら</a><script type="text/javascript" src="./email.js></script>へお願いします。
PC用のブラウザでjava scriptに対応していないものは殆どありませんが、無効になっていたり携帯からアクセスした場合はアドレスを見ることができません。そこで、テーブルタグなどを使ってメールアドレスを記載したaddress.htmlというファイルを用意し、java scriptが無効の場合はそのファイルへのリンクを表示する形式としました。
.jsファイルのtry〜の記述は、スクリプトが有効ならid="adrs"で記述されたaddress.htmlへのリンクを表示させない為のものです。
それにしても、ほんとにスパム対策は大変です。えらく儲かるのか知りませんがスパム業者の執念はすさまじいものですからどのみちイタチゴッコの様子を呈するのは間違いないと思いますけど、何とかならんものですかねえ・・・。
さて、これでWeb siteのhtmlファイルは対策を施した事になるのですが、これだけでは不十分です。GojuのWeb siteに設置してある掲示板はアドレスを表記できるものですから、そちらも対処しなくてはなりません。
<< つづく >>
最終更新日:2007/01/20(土) 03:08:24
Posted by マスター
▽失敗(^-^;▽
posted by マスター
posted by じゅんじゅん
posted by マスター
posted by じゅんじゅん
posted by jp3brx