スパムボットからメールを隠す効果的な方法


195

私のホームページでは、この方法を使用してスパムボットからメールを隠しています。

<a href="admin [at] example.com"
   rel="nofollow"
   onclick="this.href='mailto:' + 'admin' + '@' + 'example.com'">Contact me</a>

あなたはそれについてどう思いますか?効果的ですか?他にどのような方法を知っているか、使用していますか?


これはstackoverflow.com/questions/163628/…の複製であるか、非コミュニティウィキの長いリストであるため、他の1つは無効です。
Ciro Santilli郝海东冠状病六四事件法轮功

5
これには、より多くの投票、回答、および見解があります。賛成投票、回答、意見の少ない別の人を支持してそれを閉じるべきではありません。
abatishchev 2014

1
私はこれがはるかに魅力的であるという事実に従うためにそれを閉じます。
abatishchev 2014

6
最善の解決策は、ソリューションを共有しないことです。残念ながら、これはその種の質問です。自分の解決策を見つけて自分で保管するのが最善です。標準化されると、スパムボットはそれを克服するように適応されます。
Dimitris 2014年

1
最良の解決策は、以下の解決策のいくつかを組み合わせることです。たとえば、画像としての電子メールの最初の部分、2番目の部分this.href.replace(/x/g,'')、16進数でエンコードされた3番目の部分など。スパムボットは、どんなに巧妙であっても、電子メールアドレス。

回答:


98

これは私が使用した方法で、サーバー側インクルードを使用しています。たとえば、次のもの<!--#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経由でメールを受け取っているので、スパムはほとんど問題ではありません。ですから、この方法がどれほど効果的であるかは言えません。このグラフを作成したこの研究(古いものですが)を読むことをお勧めします。

enter image description here


なぜサーバーサイドインクルードが必要なのemailObfuscator.includeですか?単純な.htmlで書くのと同じではないでしょうか?(おそらくそれは単なる例ですか?)また、なぜ<!-- -->スクリプト内でHTMLコメントを使用するのですか?最後に、<script>タグの1つが小文字で、他のタグは大文字であるのはなぜ<SCRIPT>ですか。これらの方法はボットや何かを混乱させるのに役立ちますか?
テンプラー14

@Templar SSIは不要であり、ボットを混乱させることもありません。それは私のサイトをモジュール化(作り)します(このメソッドをもう使わないでください)。コメントは私がハックを見つけた場所のソースを引用していました(今は壊れたリンクです)。ケースの変更はまぐれです。それがボットを混乱させるなら、なお良いのですが、私はそれが何かの効果を持っているとは思いません。
Fuhrmanator 2014

4
同じアイデアを探求する最近の完全な研究:grall.name/posts/1/antiSpam-emailAddressObfuscation.html
Lucas Cimon

95

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


6
これにはさらに賛成が必要です。
heXer

理由はわかりませんが、このソリューションは非常に印象的ですが、メールクライアントをトリガーできません。これをテストするためのフィドルです:jsfiddle.net/wd436tg3
Ricardo Zea

1
@RicardoZeaどのブラウザを使用していますか?あなたのフィドルはクロム、ie11、edge、firefoxで私にとってはうまく機能します
cyptus

3
驚くばかり。ただし、onclick-eventに「; return false」を追加します。これにより、ブラウザのURLへの#の醜い追加が防止されます(元のhref-linkをキャンセルすることにより)
T4NK3R

5
ただし、(表示されている)メールアドレスを手動でコピーすることはできません(Chrome、Firefox、またはEdgeのいずれか)。
T4NK3R 2017

83

このように見てください。かなり賢く、CSSを使用しています。

CSS

span.reverse {
  unicode-bidi: bidi-override;
  direction: rtl;
}

HTML

<span class="reverse">moc.rehtrebttam@retsambew</span>

上記のCSSは、読み取り方向を上書きし、テキストを正しい順序でユーザーに提示します。

それが役に立てば幸い

乾杯


54
きっと面白いです。しかし、残念ながら、これはクリックできず、コピー/貼り付けには機能しませんが、点字リーダーなどの非CSSブラウザーは無視されます。
Arjan、

うーん、いいですが、クローラーを書く人がそれを見ると、それは役に立たなくなります。
マウ

6
逆電子メールアドレスをRegExと照合することは、非逆照合と同じくらい簡単です。スパミングは10億ドル規模のビジネスであり、スパマーは独自のCPUサイクルを使用して画面をこすり取っていません。実際、彼らはすでにこの会話を読み、それに応じてメソッドを調整しています。コンピューターで読み取り可能なものはすべて、ボットによって読み取り可能になります。CSSまたはJavaScriptのどちらで実行されるか。
JaniHyytiäinen2013

3
@JaniHyytiäinen同意しない。彼らがCPUにお金を払っていないという事実は、彼らが無制限のリソースを持っているという意味ではありません。JSインタープリターを実行すると、そのコストに対して生成されるアドレスが少なすぎることが判明した場合は、無効にします。
o0 '。

1
@Lohoris:Googleは平均ページ読み込み時間(2.45秒)と平均ページサイズ(320KB)を報告します。これにより、実行できる解析の​​量がわかります。ダウンロードスレッドがリクエストを実行している間、解析スレッドは解析を実行できます。ダウンロードの大半が待っています。これにより、dlスレッドは、パーサーへの送信を決定する前に前提条件をチェックする可能性を与えます。たとえば、レンダリングページ、indexOf( '@')、indexOf( 'mailto:')などです。解析スレッドは、一致の前後で+ -200文字しか受信しないため、非常に複雑な解析が可能になり、無限に表示されます。解析力の条件。
JaniHyytiäinen、2015

52

私はこれに関してまったく違う見方をしています。MailHideを使用していますします。

MailHideはGoogleのシステムであり、ユーザーはreCAPTCHAテストを完了してメールを表示する必要があります。


15
このリンクで質問に答えることができますが、回答の重要な部分をここに含め、参照用のリンクを提供することをお勧めします。リンクされたページが変更されると、リンクのみの回答が無効になる可能性があります。
showdev 14

5
私は一般的にこの感情に同意しますが、この場合の答えは特定のツールを使用することです。リンクが消えてしまったら答えを削除します。
tvanfosson 2014

ありがとう—これは素晴らしいことです。私はこのようなものを書いています(明らかにリンクです):私にメールを送ってください:明らかにします
CHRS

6
Googleは、Match 2018の時点でMailHideを無効にしたことに注意してください。「無料」のGoogleサービスと同様に、データから利益を得られる限り提供し、必要なものを取得したらドロップします。無料サービスを提供する最も信頼性の低い会社。何をしようとしているのかを中継する必要がある場合は、Googleや他の誰かのサービスから離れます。
masi

51

もともと私の考えではありませんが、著者を見つけることができません。

<a href="mailto:coxntact@domainx.com"
    onmouseover="this.href=this.href.replace(/x/g,'');">link</a>

必要なだけxを追加します。読み取り、コピー、貼り付けは完全に機能し、ボットは読み取ることができません。


2
きちんと!しかし、モバイルユーザーはどうですか?
Bodzio

マウスオーバーは、リンクをタッチしたときにもトリガーされます。正常に動作するはずです。
Andrew Swift

4
アドレスにxが含まれていない限り機能します。:-pしかし、私は知っています、別の文字を使用してください。
Dan Henderson、

1
しかし、JavaScriptが無効になっている場合は、存在しないアドレスがユーザーに表示され、顧客/ユーザーを失うことになります。
Xeevis、2016年

34
JavaScriptが無効になっていると、私のサイトはまったく機能しません;-)
Andrew Swift

16

私ができる唯一の確実な方法は、メールアドレスに送信するスクリプトに送信するフォームである「Contact Me」ページを作成することだと思います。こうすることで、あなたの住所が公開されることは決してありません。これは何らかの理由で望ましくない場合がありますが、かなり良い解決策だと思います。誰かのメールアドレスを自分のサイトからメールクライアントにコピー/貼り付けしてメッセージを送信するように強いられたとき、私はしばしば腹を立てます。私はむしろ彼らのサイトのフォームを介してそれを正しく行いたいです。また、この方法では、匿名のコメントを送信することもできます。キャプチャなどの何らかのボット対策スキームを使用してフォームを保護してください。SOでここで議論されているそれらの多くがあります。


6
これの唯一の問題は、時間をかけてコピーしてどこかに貼り付けない限り、送信したメッセージのコピーがないことです。個人的には、コピーと貼り付けは気にせず、それぞれ自分で貼り付けます。
gvkv 2009年

6
送信者はコピーを持っていません。Web上の多くの種類のフォームでは、自分でコピーを取得するオプションが気に入っています。ただし、多くの場合、このようなオプションを使用すると、メッセージを匿名で誰にでも匿名で送信できます...
Arjan

12
これはあなたのメールアドレスを隠すかもしれませんが、あなたがキャプチャ画像検証スクリプトでフォームを保護しない限り、それはスパムを全く止めません。
SimonDowdles 2010

1
また、送信者にコピーを送信するオプションを含めることで、コピーがない送信者の問題を解決することもできます。
steinybot 2013年

1
「自分にコピーを送信する」オプション-フォームを効果的に送信者としてのスパムカノンに変換します-悪い考えです!
T4NK3R 2017


10

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);
?>

1
phpを使用する代わりに、物理的にイメージを作成できます。また、CSS反転と同様に、ペンを使用しない限り、クリックできないという問題があり、コピーできません:P
Claudiu

9

私の答えは多くの人に好まれないことはわかっていますが、評価を下げる前に、ここで概説されている点を考慮してください。

機械で簡単に読み取り可能なものは、スパマーによって簡単に機械で読み取り可能になります。彼らの行動は私たちには愚かに思えますが、彼らは愚かな人々ではありません。彼らは革新的で機知に富んでいます。彼らはボットを使用して電子メールを収集するだけでなく、大量の方法を自由に利用でき、それに加えて、電子メールの新鮮なリストに料金を支払うだけです。つまり、彼らは世界中で何千人ものブラックハッカーを雇って仕事を実行させたのです。他の人のブラウザの画面をこするマルウェアをコード化する準備ができている人々は、最終的にあなたが役に立たないことを達成しようとしているあらゆる方法をレンダリングします。このスレッドはすでに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);

8

私のお気に入りの方法の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>

次に、ソースを調べてください。うれしい驚きです。


それは良い例です。ありがとう。HEXデコードを使用したSpamBotに関する手がかりはありますか?
jasonflaherty 2012

7

あなたはヘキサでHTMLエンティティを使用して文字を非表示にしようとすることができます(例:@の場合は&#x40)。これは便利なソリューションです。正しいブラウザで翻訳され、通常のリンクを使用できます。欠点は、ボットがそれを理論的に翻訳できることですが、それは少し変わっています。私はこれを使用して、ブログの電子メールを保護しています。

別の解決策はJavaScript使用することですてアドレスの一部を組み立て、その場でアドレスをデコードすることです。欠点は、JavaScriptが無効になっているブラウザーがアドレスを表示しないことです。

最も効果的な解決策は画像使用することですが、ユーザーがアドレスを手動でコピーしなければならないのは面倒です。

JavaScriptが無効になっているユーザーにのみ欠点(@を手動で書き込む)を追加するだけなのでソリューションはかなり良いです。あなたはまた、より安全にすることができます:

onclick="this.href='mailto:' + 'admin' + '&#x40;' + 'domain.com'"

5

あまり知られていない方法であるため、スパムボットはこれを解釈しません:)

まず、CSSを定義します。

email:before {
    content: "admin";
}

email:after {
    content: "@example.com";
}

これで、メールを表示する場所に、次のHTMLを挿入するだけです。

<div id="email"></div>

そしてタダ!


これは機能しますが、ほとんどのユーザーの操作性に影響を与える可能性があるコピーペーストはサポートしていません
Iruku Kagika

4

私は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);
});

これが実際の例です。


リンクをホバーすると、ブラウザーのステータスバーにhrefの正しい値が表示されますか?
Nik O'Lai

はい、リンクにホバーすると、hrefの正しい値が表示されます。そのため、jQueryメソッド.hoverを実装する必要があります。
セルジュ2015年

残念ながら、いいえ、リンクに初めてカーソルを合わせたとき(少なくともme@example.spam)、hrefの正しい値は表示されません。2番目のホバーでは、すべてが正常でした。独自のリンクでテストしてください。
Nik O'Lai 2015

1
ChromeとIEで動作しています。Firefoxのみのようで、最初のホバー時にステータスバーが更新されません。Firefoxの解決策を見つけようと思います。
セルジュ2015

1
なるほど、なるほど。
Eric Bishard 2016年

3

!-参照用にこれを追加します。情報がどれだけ古いかわからないが、スクリプトの使用を必要としないいくつかの簡単なソリューションについて説明します

これを自分で検索した後、このページだけでなくこれらのページにも出くわしました:

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

これを前述の方法のいずれかと組み合わせると、さらに効果的になる可能性があります


3

簡単な解決策の1つは、実際の文字ではなくHTMLエンティティを使用することです。たとえば、「me@example.com」は次のように変換されます。

<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#109;&#101;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;">email me</A>

2
google.se/search?q=HTML+entities+converterを試してみてください;)
grapefrukt

1
グーグルはあなたのためにたくさんのページを見つけることができます。一つの例:hp.vector.co.jp/authors/VA022023/javascript/...
ロマンLinsolas

4
しかし、ボットも同じように簡単に正規表現できないのでしょうか?
ガンガンチュアン

20
痛いです、me @ stack ...の例は、me @ example.com、me @ example.net、またはme@example.orgのように記述してください。これらは、所有者以外が例で使用する必要がある唯一のドメイン名です!
Arjan、


3

これが私の作業バージョンです:


フォールバックテキストを含むコンテナをどこかに作成します。

<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>

2

電子メールアドレスを非表示にする最良の方法は、ボットプログラマーがこの「エンコーディング」を発見し、復号化アルゴリズムを実装するまでのみ有効です。

JavaScriptを解釈するクローラーがたくさんあるため、JavaScriptオプションは長くは機能しません。

答えはありません、imho。


JavaScriptを解釈するクローラーはありますか?私の1つのJavaScriptエンコード方式は、過去数年間、私にとってはうまく機能しているように見えます。私のスパム率はかなり安定しており、週に4回程度なので、この方式に委託した他の人のアドレスについては心配していません。したほうがいい?
ケヴ

確かに、それは多くのクローラーを除外するかもしれませんが、私が、アドレスクローラーを作成した場合、JavaScript libを実装します:)
guerda

想像以上の努力
匿名の臆病者

Googleは現在、一部のJSをクロールしています。
アリスターブルマン

2

[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="&#x6D;&#x61;&#x69;&#x6C;&#x74;&#x6F;&#x3A;&#x3F;&#x74;&#x6F;&#x3D;&#x25;&#x32;&#x43;&#x25;&#x37;&#x35;&#x25;&#x37;&#x33;&#x25;&#x36;&#x35;&#x25;&#x37;&#x32;&#x25;&#x34;&#x30;&#x25;&#x36;&#x35;&#x25;&#x37;&#x38;&#x25;&#x36;&#x31;&#x25;&#x36;&#x44;&#x25;&#x37;&#x30;&#x25;&#x36;&#x43;&#x25;&#x36;&#x35;&#x25;&#x32;&#x45;&#x25;&#x36;&#x33;&#x25;&#x36;&#x46;&#x25;&#x36;&#x44;">mail me</a>

しかし、それらを使用することは合法であるため、すべてのブラウザ/電子メールクライアントもこれらのエンコーディングを処理する必要があります。


完全に同意します。スパマーは「賢い」人々であり、何年もの人々が構文の代わりに[at]または[dot]を追加した後、もちろんこれらのパターンをピックアップするアルゴリズムを持っています。
SimonDowdles

これらのHEX値のデコードについてはどうですか?
jasonflaherty 2012

2

私はSpamSpanのファンです -難読化されていますが、JSが無効になっていても解読できます。トラフィックの少ないウェブサイトで1年ほど使用しているだけですが、これも機能しているようです。

Drupalが必要に応じて、電子メールを自動的にSpamSpansに変換するモジュールもあります。


1

リンクを右クリックして[URLをコピー]を選択すると機能しますか?そうでない場合は、それは理想的な状況ではありません(mailtoリンクをクリックすることはほとんどありません。メールアドレスをコピーしてメールアプリケーションに貼り付けるか、特定の時点で必要な場所に貼り付けます)。

以前はオンライン(UseNet、Webなど)でメールアドレスをかなり偏執的で保護していたが、最近では、プログラムでローカルパーツとドメインを照合する「スパムの可能性のあるターゲット」が実際に生成されていると思われる。これは、ときどきメールサーバーのログを調べたことに基づいています。存在しないアドレスへの配信試行はかなりの数になる傾向があります(アドレススクレイピングが非常に蔓延していた90年代後半にUseNetにぶら下がったスパム餌の切り捨てバージョンを含む)。


1

非常に多くの手法を使用した後、ボットは@Símboloを検索し、最近は[at] antのバリ​​エーションを検索するため、2つの手法を使用しています。

  1. 私はdomaintollsが使用するような画像にメールを書いて、それは完全に機能するか、
  2. Símbolo(@)を次のようなイメージに置き換える

@置換 また、画像のaltはalt = "@"になるため、ボットは画像を検出し、すべての人間が通常のアドレスとして認識します。そのため、コピーした場合はメールをコピーし、ジョブは実行されないため、コードは次のようになります。

<p>myname<img src="http://www.traidnt.net/vb/images/mail2.gif" width="11" height="9" alt="@" />domain.com</p>


1

まず、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>

これがあなたが望むものかどうかを確認し、他の人のアイデアと組み合わせてください。あなたは決して確信することはできません。


2
ああ見て-me@domain.extension-プレーンテキストのメールアドレスがあります。
アリスターブルマン

1

そして私の機能。このトピックに配置された回答を見て作成しました。

 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

オプション1:メールアドレスを複数の部分に分割し、JavaScriptでこれらの部分から配列を作成します。次に、これらのパーツを正しい順序で結合し、.innerHTMLプロパティを使用して、電子メールアドレスをWebページに追加します。

 <span id="email">  </span>   // blank tag

 <script>
 var parts = ["info", "XXXXabc", "com", "&#46;", "&#64;"];
 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 

1
オプション1は良いオプションではないと思います。ボットと一緒に実行されているパーサーはinnerHTMLの値を簡単に把握できます。また、スマートボットが把握できるため、オプション3もおそらくそれほど良くありません。オプション2が最適だと思います。
John Sonderson、2015

1

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/


1

HTML_CHARACTERはどうですか?:

joe&#064;mail.com

出力

joe@mail.com

1
このようにメールアドレスをクリックすることはできません。@記号の配置は、インラインに配置された場合と同じように表示されるとは限らないので、完全ではありません。
ブレントオコナー

0

この問題に対する簡単なjqueryソリューションを次に示します。

<script type="text/javascript">
$(document).ready(function() {
    str1="mailto:";
    str2="info";
    str3="@test.com";
    $("#email_a").attr("href", str1+str2+str3);

});
</script>

<a href="#" id="email_a"><img src="sample.png"/></a>

0

私はofauraxの答えが一番好きですが、もう少し隠しメール用にこれを変更します。

onclick="p1='admin'; p2='domain.com'; this.href='mailto:' + p1 + '& #x40;' + p2"

0

私は別の答えを提供する必要があります。私は遊んで楽しいものを思いついたばかりです。

多くの一般的な文字テーブルで、@と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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.