貴様にくれてやるメールアドレスなどない
mailtoの暗号化方法をやってみた。
サービスはあるけど
mailtoの暗号化って色々ありますよね。
でもなんか、メールアドレスを入力したらそれに対応するscriptが出てくる感じばかりで
え、それ自体がメールアドレス収集になってるんじゃねwwwみたいに疑心暗鬼になってしまいます。
じゃぁ自分でやればいいじゃんという事で、作ってみました。
なんで暗号化しないといけないのか
botとかでサイトを駆け巡り、【@】や、【mailto:】という文字列を判定してメールアドレスを抜き取るわけです。
スパムメールが送信し放題なわけです。
この手の手法は手動で行われているわけではないです。割に合わないので手動ではしません(たぶん。)
では、人間が見ればわかるけど、botとかが分からないようにすればいいのでは?という考えから
暗号化をする事になっています。
早速、メールアドレスの文字コード化から
メールアドレスの文字コード化をしてみましょう。
謎の数字がでてきたと思います。
こいつが、文字コード(厳密には、Unicode コードポイントを10進数値にしたもの。つまり、文字コードをさらに数字化したものって感じです)です
で、これだけだと変換したら丸わかりなので、各数字、-1したものを出しています。
つまり、表示された数字をそのままデコード(元に戻す)しても、元通りにはならないわけです。おほぉー
次、mailto偽装とjsコード
文字コード化が済んだら次はmailtoの生成jsを。
手直しが必要なのは、コードの埋め込みと、aタグの場所だけ
// html側には <a href="javascript:void(0);" class="mai_l_c" ></a>が記述してあるとします。 //--------------------------------------- // jQueryバージョン //--------------------------------------- var nameString = converter(String.fromCharCode(【さっき生成した暗号化済コード】)); targetElem = $('.mai_l_c'); // mailtoを出したい所のaタグを指定するように targetElem.empty().text(nameString); targetElem.on('click',function() { location.href="mai"+"lto:"+nameString; }); function converter(M){ var str="", str_as=""; for(var i=0;i<M.length;i++) { str_as = M.charCodeAt(i); str += String.fromCharCode(str_as + 1); } return str; } //------------------------------------------ // ネイティブなjavascript //------------------------------------------ // getElementsByClassNameはIE8未対応なので使ってない方法で var nameString = converter(String.fromCharCode(【さっき生成した暗号化済コード】)), targetElems = document.getElementsByTagName('a'), targetElems2 = new Array(); for(var i=0;i<targetElems.length;i++) { if(targetElems[i].hasAttribute('class') == true ) { if(targetElems[i].getAttribute('class') == 'mai_l_c') { targetElems2.push(targetElems[i]); } } } for(var i=0;i<targetElems2.length;i++) { console.log(nameString); targetElems2[i].textContent = nameString; targetElems2[i].onclick = function() { location.href="mai"+"lto:"+nameString; } } function converter(M) { var str="", str_as=""; for(var i=0;i<M.length;i++) { str_as = M.charCodeAt(i); str += String.fromCharCode(str_as + 1); } return str; }
結果
html側からもJS側からも、メールアドレスが消え去りました。おほぉー
おまけに
【location.href="mai"+"lto:"+nameString;】
こうすることで、mailtoではなく、maiとltoと分断され、mailtoと分かりにくくなっとります。
完璧に防げるものではないですが、これくらいしてやればある程度安心なのではと思います。