私のホームページでは、この方法を使用してスパムボットからメールを隠しています。
<a href="admin [at] example.com"
rel="nofollow"
onclick="this.href='mailto:' + 'admin' + '@' + 'example.com'">Contact me</a>
あなたはそれについてどう思いますか?効果的ですか?他にどのような方法を知っているか、使用していますか?
私のホームページでは、この方法を使用してスパムボットからメールを隠しています。
<a href="admin [at] example.com"
rel="nofollow"
onclick="this.href='mailto:' + 'admin' + '@' + 'example.com'">Contact me</a>
あなたはそれについてどう思いますか?効果的ですか?他にどのような方法を知っているか、使用していますか?
回答:
これは私が使用した方法で、サーバー側インクルードを使用しています。たとえば、次のもの<!--#include file="emailObfuscator.include" -->
がemailObfuscator.include
含まれています。
<!-- // http://lists.evolt.org/archive/Week-of-Mon-20040202/154813.html -->
<script type="text/javascript">
function gen_mail_to_link(lhs,rhs,subject) {
document.write("<a href=\"mailto");
document.write(":" + lhs + "@");
document.write(rhs + "?subject=" + subject + "\">" + lhs + "@" + rhs + "<\/a>");
}
</script>
アドレスを含めるには、JavaScriptを使用します。
<script type="text/javascript">
gen_mail_to_link('john.doe','example.com','Feedback about your site...');
</script>
<noscript>
<em>Email address protected by JavaScript. Activate JavaScript to see the email.</em>
</noscript>
私は2005年からGmail経由でメールを受け取っているので、スパムはほとんど問題ではありません。ですから、この方法がどれほど効果的であるかは言えません。このグラフを作成したこの研究(古いものですが)を読むことをお勧めします。
emailObfuscator.include
ですか?単純な.htmlで書くのと同じではないでしょうか?(おそらくそれは単なる例ですか?)また、なぜ<!--
-->
スクリプト内でHTMLコメントを使用するのですか?最後に、<script>
タグの1つが小文字で、他のタグは大文字であるのはなぜ<SCRIPT>
ですか。これらの方法はボットや何かを混乱させるのに役立ちますか?
CSSでコンテンツと属性を操作する:
.cryptedmail:after {
content: attr(data-name) "@" attr(data-domain) "." attr(data-tld);
}
<a href="#" class="cryptedmail"
data-name="info"
data-domain="example"
data-tld="org"
onclick="window.location.href = 'mailto:' + this.dataset.name + '@' + this.dataset.domain + '.' + this.dataset.tld; return false;"></a>
JavaScriptが無効になっている場合、クリックイベントだけが機能せず、電子メールが表示されます。
別の興味深いアプローチ(少なくともクリックイベントがない場合)は、右から左へのマークを使用して書き込み方向を上書きすることです。これについての詳細:https : //en.wikipedia.org/wiki/Right-to-left_mark
このように見てください。かなり賢く、CSSを使用しています。
CSS
span.reverse {
unicode-bidi: bidi-override;
direction: rtl;
}
HTML
<span class="reverse">moc.rehtrebttam@retsambew</span>
上記のCSSは、読み取り方向を上書きし、テキストを正しい順序でユーザーに提示します。
それが役に立てば幸い
乾杯
私はこれに関してまったく違う見方をしています。MailHideを使用していますします。
MailHideはGoogleのシステムであり、ユーザーはreCAPTCHAテストを完了してメールを表示する必要があります。
もともと私の考えではありませんが、著者を見つけることができません。
<a href="mailto:coxntact@domainx.com"
onmouseover="this.href=this.href.replace(/x/g,'');">link</a>
必要なだけxを追加します。読み取り、コピー、貼り付けは完全に機能し、ボットは読み取ることができません。
私ができる唯一の確実な方法は、メールアドレスに送信するスクリプトに送信するフォームである「Contact Me」ページを作成することだと思います。こうすることで、あなたの住所が公開されることは決してありません。これは何らかの理由で望ましくない場合がありますが、かなり良い解決策だと思います。誰かのメールアドレスを自分のサイトからメールクライアントにコピー/貼り付けしてメッセージを送信するように強いられたとき、私はしばしば腹を立てます。私はむしろ彼らのサイトのフォームを介してそれを正しく行いたいです。また、この方法では、匿名のコメントを送信することもできます。キャプチャなどの何らかのボット対策スキームを使用してフォームを保護してください。SOでここで議論されているそれらの多くがあります。
見る Webページのボットから電子メールアドレスを安全にするをしてください。
Facebookなどがあなたのメールアドレスの画像をレンダリングする方法が好きです。
私は過去にもEnkoderを使用したことがあります。
PHPをサポートしている場合は、次のようなことができます。
<img src="scriptname.php">
そして、scriptname.php:
<?php
header("Content-type: image/png");
// Your email address which will be shown in the image
$email = "you@yourdomain.com";
$length = (strlen($email)*8);
$im = @ImageCreate ($length, 20)
or die ("Kann keinen neuen GD-Bild-Stream erzeugen");
$background_color = ImageColorAllocate ($im, 255, 255, 255); // White: 255,255,255
$text_color = ImageColorAllocate ($im, 55, 103, 122);
imagestring($im, 3,5,2,$email, $text_color);
imagepng ($im);
?>
私の答えは多くの人に好まれないことはわかっていますが、評価を下げる前に、ここで概説されている点を考慮してください。
機械で簡単に読み取り可能なものは、スパマーによって簡単に機械で読み取り可能になります。彼らの行動は私たちには愚かに思えますが、彼らは愚かな人々ではありません。彼らは革新的で機知に富んでいます。彼らはボットを使用して電子メールを収集するだけでなく、大量の方法を自由に利用でき、それに加えて、電子メールの新鮮なリストに料金を支払うだけです。つまり、彼らは世界中で何千人ものブラックハッカーを雇って仕事を実行させたのです。他の人のブラウザの画面をこするマルウェアをコード化する準備ができている人々は、最終的にあなたが役に立たないことを達成しようとしているあらゆる方法をレンダリングします。このスレッドはすでに10人以上のそのような人々に読まれており、彼らは私たちを笑っています。それらのいくつかは、私たちが彼らに新しい挑戦を我慢できないことを発見するために涙にさえ退屈するかもしれません。
最終的に自分の時間を節約しようとしているのではなく、他の人の時間を節約しようとしていることを覚えておいてください。このため、ここで余分な時間を費やすことを検討してください。機能する実行しやすい魔法の弾丸はありません。サイトで100人の電子メールを公開している会社で働いており、1人あたり1日に1通のスパム電子メールを削減できる場合、1年間に36,500通のスパム電子メールを話していることになります。このような電子メールを削除するのに平均で5秒かかる場合、年間約50営業時間ということになります。煩わしさの軽減は言うまでもありません。だから、これに数時間を費やしてみませんか?
時間を大切にするのは、あなたやメールを受け取った人だけではありません。したがって、電子メールアドレスを解読しても効果が得られないような方法で、電子メールアドレスを難読化する方法を見つける必要があります。電子メールを難読化するために広く使用されている方法を使用する場合、それを解読することは本当に報われます。その結果、クラッカーは数万または数十万とは言わないまでも数千の新しい電子メールを手に入れます。そして彼らにとって、彼らはお金を得ます。
したがって、先に進んで独自のメソッドをコーディングしてください。これは、ホイールの再発明が実際に効果を発揮するまれなケースです。機械可読ではないメソッドを使用し、ユーザーエクスペリエンスを犠牲にすることなく、ユーザーとのやり取りが必要になるメソッドを使用します。
私は約20分を費やして、私の意味の例をコード化しました。この例では、気に入ったという理由だけでKnockoutJSを使用しましたが、おそらく自分で使用することはないと思います。しかし、とにかくそれは無関係です。これは広く使用されていないカスタムソリューションです。それをクラックしても、その方法は広大なインターネットの単一のページでしか機能しないため、それを実行しても報酬は得られません。
ここにフィドルがあります: http //jsfiddle.net/hzaw6/
以下のコードは、優れたコードの例ではありません。しかし、ここでは電子メールを処理することさえマシンが理解するのが非常に難しいコードの簡単なサンプルにすぎません。そして、たとえそれができたとしても、大規模に実行しても成果はありません。
そして、はい、「未定義またはnull参照のプロパティ「属性」を取得できません」という理由で、IE = lte8では機能しないことはわかっていますが、実際の実装ではなく、単なるメソッドのデモであるため、気にしません。そのままの実稼働での使用を意図したものではありません。よりクールで、技術的により堅固な独自のコードを自由に作成してください。
ああ、決してHTMLやJavaScriptでメールやメールに名前を付けることはありません。mailやemailという名前のDOMとwindowオブジェクトをこすり取り、それに電子メールと一致するものが含まれているかどうかを確認するのは、あまりにも簡単です。これが、完全な形式の電子メールを含む変数が不要になる理由です。また、このような変数を割り当てる前に、ユーザーがページを操作できるようにする理由でもあります。JavaScriptオブジェクトモデルにDOM対応状態の電子メールアドレスが含まれている場合は、それらをスパマーに公開しています。
HTML:
<div data-bind="foreach: contacts">
<div class="contact">
<div>
<h5 data-bind="text: firstName + ' ' + lastName + ' / ' + department"></h5>
<ul>
<li>Phone: <span data-bind="text: phone"></span></li>
<li><a href="#999" data-bind="click:$root.reveal">E-mail</a> <span data-bind="visible: $root.msgMeToThis() != ''"><input class="merged" data-bind="value: mPrefix" readonly="readonly" /><span data-bind="text: '@' + domain"></span></span></li>
</ul>
</div>
</div>
</div>
JS
function ViewModel(){
var self = this;
self.contacts = ko.observableArray([
{ firstName:'John', mPrefix: 'john.doe', domain: 'domain.com', lastName: 'Doe', department: 'Sales', phone: '+358 12 345 6789' },
{ firstName:'Joe', mPrefix: 'joe.w', domain: 'wonder.com', lastName: 'Wonder', department: 'Time wasting', phone: '+358 98 765 4321' },
{ firstName:'Mike', mPrefix: 'yo', domain: 'rappin.com', lastName: 'Rophone', department: 'Audio', phone: '+358 11 222 3333' }
]);
self.msgMeToThis = ko.observable('');
self.reveal = function(m, e){
var name = e.target.attributes.href.value;
name = name.replace('#', '');
self.msgMeToThis(name);
};
}
var viewModel = new ViewModel();
ko.applyBindings(viewModel);
私のお気に入りの方法の1つは、phpを使用して電子メールアドレスを難読化することです。古典的な例は、次のように文字をHEX値に変換することです。
function myobfiscate($emailaddress){
$email= $emailaddress;
$length = strlen($email);
for ($i = 0; $i < $length; $i++){
$obfuscatedEmail .= "&#" . ord($email[$i]).";";
}
echo $obfuscatedEmail;
}
そして、私のマークアップでは、次のように呼び出します。
<a href="mailto:<?php echo myobfiscate('someone@somewhere.com'); ?>"
title="Email me!"><?php echo myobfiscate('someone@somewhere.com');?> </a>
次に、ソースを調べてください。うれしい驚きです。
あなたはヘキサでHTMLエンティティを使用して文字を非表示にしようとすることができます(例:@の場合は&#x40)。これは便利なソリューションです。正しいブラウザで翻訳され、通常のリンクを使用できます。欠点は、ボットがそれを理論的に翻訳できることですが、それは少し変わっています。私はこれを使用して、ブログの電子メールを保護しています。
別の解決策はJavaScriptを使用することですてアドレスの一部を組み立て、その場でアドレスをデコードすることです。欠点は、JavaScriptが無効になっているブラウザーがアドレスを表示しないことです。
最も効果的な解決策は画像を使用することですが、ユーザーがアドレスを手動でコピーしなければならないのは面倒です。
JavaScriptが無効になっているユーザーにのみ欠点(@を手動で書き込む)を追加するだけなので、ソリューションはかなり良いです。あなたはまた、より安全にすることができます:
onclick="this.href='mailto:' + 'admin' + '@' + 'domain.com'"
あまり知られていない方法であるため、スパムボットはこれを解釈しません:)
まず、CSSを定義します。
email:before {
content: "admin";
}
email:after {
content: "@example.com";
}
これで、メールを表示する場所に、次のHTMLを挿入するだけです。
<div id="email"></div>
そしてタダ!
私はCSSとjQueryの非常にシンプルな組み合わせを使用しています。これは、ユーザーに電子メールアドレスを正しく表示し、アンカーがクリックまたはホバーされたときにも機能します。
HTML:
<a href="mailto:me@example.spam" id="lnkMail">moc.elpmaxe@em</a>
CSS:
#lnkMail {
unicode-bidi: bidi-override;
direction: rtl;
}
jQuery:
$('#lnkMail').hover(function(){
// here you can use whatever replace you want
var newHref = $(this).attr('href').replace('spam', 'com');
$(this).attr('href', newHref);
});
これが実際の例です。
!-参照用にこれを追加します。情報がどれだけ古いかわからないが、スクリプトの使用を必要としないいくつかの簡単なソリューションについて説明します
これを自分で検索した後、このページだけでなくこれらのページにも出くわしました:
http://nadeausoftware.com/articles/2007/05/stop_spammer_email_harvesters_obfuscating_email_addresses
メールアドレスを逆にしてみてください
プレーンHTMLの例:
<bdo dir="rtl">moc.elpmaxe@nosrep</bdo>
Result : person@example.com
CSSを使用した同じ効果
CSS:
.reverse { unicode-bidi:bidi-override; direction:rtl; }
HTML:
<span class="reverse">moc.elpmaxe@nosrep</span>
Result : person@example.com
これを前述の方法のいずれかと組み合わせると、さらに効果的になる可能性があります
簡単な解決策の1つは、実際の文字ではなくHTMLエンティティを使用することです。たとえば、「me@example.com」は次のように変換されます。
<a href="mailto:me@example.com">email me</A>
これが私の作業バージョンです:
フォールバックテキストを含むコンテナをどこかに作成します。
<div id="knock_knock">Activate JavaScript, please.</div>
そして、DOMの下部に(レンダリングを書き込んだ)次のスニペットを追加します。
<script>
(function(d,id,lhs,rhs){
d.getElementById(id).innerHTML = "<a rel=\"nofollow\" href=\"mailto"+":"+lhs+"@"+rhs+"\">"+"Mail"+"<\/a>";
})(window.document, "knock_knock", "your.name", "example.com");
</script>
生成されたハイパーリンクを指定されたコンテナーに追加します。
<div id="knock_knock"><a rel="nofollow" href="your.name@example.com">Mail</a></div>
さらに、ここに縮小バージョンがあります。
<script>(function(d,i,l,r){d.getElementById(i).innerHTML="<a rel=\"nofollow\" href=\"mailto"+":"+l+"@"+r+"\">"+"Mail"+"<\/a>";})(window.document,"knock_knock","your.name","example.com");</script>
電子メールアドレスを非表示にする最良の方法は、ボットプログラマーがこの「エンコーディング」を発見し、復号化アルゴリズムを実装するまでのみ有効です。
JavaScriptを解釈するクローラーがたくさんあるため、JavaScriptオプションは長くは機能しません。
答えはありません、imho。
[at]
と他の変装を@
シンボルとして認識するボットはおそらく存在します。したがって、これは本当に効果的な方法ではありません。
確かに、URLエンコードやHTML文字参照(またはその両方)などのエンコードを使用できます。
// PHP example
// encodes every character using URL encoding (%hh)
function foo($str) {
$retVal = '';
$length = strlen($str);
for ($i=0; $i<$length; $i++) $retVal.=sprintf('%%%X', ord($str[$i]));
return $retVal;
}
// encodes every character into HTML character references (&#xhh;)
function bar($str) {
$retVal = '';
$length = strlen($str);
for ($i=0; $i<$length; $i++) $retVal.=sprintf('&#x%X;', ord($str[$i]));
return $retVal;
}
$email = 'user@example.com';
echo '<a href="'.bar('mailto:?to=' . foo(','.$email.'')).'">mail me</a>';
// output
// <a href="mailto:?to=%2C%75%73%65%72%40%65%78%61%6D%70%6C%65%2E%63%6F%6D">mail me</a>
しかし、それらを使用することは合法であるため、すべてのブラウザ/電子メールクライアントもこれらのエンコーディングを処理する必要があります。
リンクを右クリックして[URLをコピー]を選択すると機能しますか?そうでない場合は、それは理想的な状況ではありません(mailtoリンクをクリックすることはほとんどありません。メールアドレスをコピーしてメールアプリケーションに貼り付けるか、特定の時点で必要な場所に貼り付けます)。
以前はオンライン(UseNet、Webなど)でメールアドレスをかなり偏執的で保護していたが、最近では、プログラムでローカルパーツとドメインを照合する「スパムの可能性のあるターゲット」が実際に生成されていると思われる。これは、ときどきメールサーバーのログを調べたことに基づいています。存在しないアドレスへの配信試行はかなりの数になる傾向があります(アドレススクレイピングが非常に蔓延していた90年代後半にUseNetにぶら下がったスパム餌の切り捨てバージョンを含む)。
非常に多くの手法を使用した後、ボットは@Símboloを検索し、最近は[at] antのバリエーションを検索するため、2つの手法を使用しています。
また、画像のaltはalt = "@"になるため、ボットは画像を検出し、すべての人間が通常のアドレスとして認識します。そのため、コピーした場合はメールをコピーし、ジョブは実行されないため、コードは次のようになります。
<p>myname<img src="http://www.traidnt.net/vb/images/mail2.gif" width="11" height="9" alt="@" />domain.com</p>
メールをエンコードするjavascriptを出力するオープンライセンスのPHPスクリプトがあります:http : //www.maurits.vdschee.nl/php_hide_email/。その後、特定のメールを引数としてphp関数を簡単に呼び出すことができます。
まず、JavaScriptを有効にしている場合にのみメールアドレスが表示されるようにします。この方法では、JavaScriptなしで読み取ることができるプレーンテキストはありません。
第二に、安全な機能を実装する方法は、<button>
タグに近づかないことです。このタグには、タグの間にテキストを挿入する必要があります。これにより、コンピューターで読み取り可能になります。代わり<input type="button">
に、onClickのJavaScriptハンドラーを試してください。次に、他者が言及したすべての手法を使用して、安全な電子メール表記を実装します。
もう1つのオプションは、「クリックしてメールアドレスを表示する」というボタンを用意することです。クリックすると、コード化された電子メール(HTMLコードの文字)に変わります。別のクリックでこれは 'mailto:email'関数にリダイレクトします
選択可能および選択不可の電子メールアドレスを持つ、最後のアイデアのコード化されていないバージョン:
<html>
<body>
<script type="text/javascript">
e1="@domain";
e2="me";
e3=".extension";
email_link="mailto:"+e2+e1+e3;
</script>
<input type="text" onClick="this.onClick=window.open(email_link);" value="Click for mail"/>
<input type="text" onClick="this.value=email;" value="Click for mail-address"/>
<input type="button" onClick="this.onClick=window.open(email_link);" value="Click for mail"/>
<input type="button" onClick="this.value=email;" value="Click for mail-address"/>
</body></html>
これがあなたが望むものかどうかを確認し、他の人のアイデアと組み合わせてください。あなたは決して確信することはできません。
そして私の機能。このトピックに配置された回答を見て作成しました。
function antiboteEmail($email)
{
$html = '';
$email = strrev($email);
$randId = rand(1, 500);
$html .= '<span id="addr-'.$randId.'" class="addr">[turn javascript on to see the e-mail]</span>';
$html .= <<<EOD
<script>
$(document).ready(function(){
var addr = "$email";
addr = addr.split("").reverse().join("");
$("#addr-$randId").html("<a href=\"mailto:" + addr + "\">" + addr + " </a>");
});
</script>
EOD;
return $html;
}
右から左へのdirとjavascriptの書き込みという2つの方法を使用します。
オプション1:メールアドレスを複数の部分に分割し、JavaScriptでこれらの部分から配列を作成します。次に、これらのパーツを正しい順序で結合し、.innerHTMLプロパティを使用して、電子メールアドレスをWebページに追加します。
<span id="email"> </span> // blank tag
<script>
var parts = ["info", "XXXXabc", "com", ".", "@"];
var email = parts[0] + parts[4] + parts[1] + parts[3] + parts[2];
document.getElementById("email").innerHTML=email;
</script>
オプション2:メールのテキストではなく画像を使用する
テキストからの画像作成者のウェブサイト:http : //www.chxo.com/labelgen/
オプション3: "@"の代わりにATを、 "。"の代わりにDOTを使用できます。
すなわち:
info(AT)XXXabc(DOT)com
JavaScriptとHTMLが混在するのが好きではないので、このソリューションを使用します。今のところ、私には問題ありません。
アイデア:-属性に暗号化された情報を提供data
し、JS内でそれを復号化することにより、さらに複雑にすることができます。これは単に文字を置き換えるか、単にそれらを逆にすることによって行われます。
HTML:
<span class="generate-email" data-part1="john" data-part2="gmail" data-part3="com">placeholder</span>
JS:
$(function() {
$('.generate-email').each(function() {
var that = $(this);
that.html(
that.data('part1') + '@' + that.data('part2') + '.' + that.data('part3')
);
});
});
試してみてください:http : //jsfiddle.net/x6g9L817/
私は別の答えを提供する必要があります。私は遊んで楽しいものを思いついたばかりです。
多くの一般的な文字テーブルで、@とazの文字が複数回出現することがわかりました。元の文字を新しいマッピングにマップして、スパムボットが電子メールが何であるかを理解するのを難しくすることができます。
文字列をループして文字の文字コードを取得し、それに65248を追加して、数値に基づいてhtmlエンティティを構築すると、人間が読める電子メールアドレスが作成されます。
var str = 'john.doe@email.com';
str = str.toLowerCase().replace(/[\.@a-z]/gi, function(match, position, str){
var num = str.charCodeAt(position);
return ('&#' + (num + 65248) + ';');
});
これが動作するフィドルです:http : //jsfiddle.net/EhtSC/8/
同じように見える文字間のより完全なマッピングのセットを作成することにより、このアプローチを改善できます。しかし、たとえば電子メールをコピーしてメモ帳に貼り付けると、多数のボックスが表示されます。
ユーザーエクスペリエンスの問題のいくつかを克服するために、リンクとして電子メールを作成しました。クリックすると、キャラクターが元のマップに戻ります。
これを改善するために、必要に応じてより複雑な文字マッピングを作成できます。たとえば「a」の代わりに使用できるいくつかの文字を見つけることができたら、それらにランダムにマッピングしないでください。
おそらくこれまでで最も安全なアプローチではありませんが、私は本当にそれをいじって楽しんでいました:D