47

電子メールアドレスをWebページに配置するとき、次のようなテキストとして配置しますか?

joe.somebody@company.com

または、巧妙なトリックを使用して、電子メールアドレスハーベスターボットをだまそうとしますか?例えば:

HTMLエスケープ文字:

joe.somebody@company.com

Javascript Decrypter:

function XOR_Crypt(EmailAddress)
{
    Result = new String();
    for (var i = 0; i < EmailAddress.length; i++)
    {
        Result += String.fromCharCode(EmailAddress.charCodeAt(i) ^ 128);
    }
    document.write(Result);
}

XOR_Crypt("êïå®óïíåâïäùÀãïíðáîù®ãïí");

人間のデコード:

joe.somebodyNOSPAM@company.com

joe.somebody AT company.com

あなたは何を使っていますか、それとも気にしていますか?

4

51 に答える 51

131

CSS で content と attr を操作する:

.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

于 2017-01-10T10:26:28.043 に答える
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 経由でメールを受け取っているので、スパムはほとんど問題になりません。したがって、この方法がどれほど効果的かは言えません。このグラフを作成したこの研究(古いものですが)を読むことをお勧めします。

ここに画像の説明を入力

于 2012-04-24T15:08:48.593 に答える
90

この方法を見てください。かなり賢く、css を使用しています。

CSS

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

HTML

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

上記の CSS は、読み上げ方向をオーバーライドし、テキストを正しい順序でユーザーに表示します。

それが役に立てば幸い

乾杯

于 2009-01-27T12:34:01.597 に答える
52

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

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

好きなだけ x を追加してください。読み取り、コピー、貼り付けが完全に機能し、ボットによって読み取られることはありません。

于 2014-10-17T08:02:33.460 に答える
46

私は一般的に気にしません。私は以前、毎日数千のスパムを受信するメーリングリストに参加していました。私たちのスパムフィルター(spamassassin)は、おそらく1日に1つか2つ通します。フィルターがこれほど優れているのに、なぜ正当な人があなたに連絡するのを難しくするのですか?

于 2008-10-02T17:47:15.417 に答える
27

独自のクレイジーなメールアドレスの難読化スキームを考案してください。一般的に知られている方法とあまり似ていない限り、それが何であるかは問題ではありません。

問題は、これに対する適切な解決策が実際には存在しないことです。それらはすべて、バイパスするのが比較的簡単であるか、むしろユーザーにとって苛立たしいものです。いずれかの方法が普及すると、誰かそれを回避する方法を見つけるでしょう。

そのため、One True の電子メール アドレスの難読化手法を探すのではなく、独自の手法を考え出してください。これらのボットの作成者は、少しクレイジーなレンダリングテキストと css および要素の境界線や、完全に奇妙で簡単にクラックされる JavaScript 暗号化を回避するために、座って座っているほどあなたのサイトを気にしていないという事実を当てにしてください。 . それが些細なことであるかどうかは問題ではありません。スパムを送信するためだけにバイパスしようとする人はいません。

于 2008-10-02T18:04:09.077 に答える
16

あなたが持つことができる唯一の確実な方法は、あなたの電子メールアドレスに送信するスクリプトに送信するフォームである Contact Me ページを作成することだと思います. そうすれば、あなたのアドレスが一般に公開されることはありません。これは何らかの理由で望ましくない場合がありますが、かなり良い解決策だと思います。誰かのメールアドレスをサイトからメールクライアントにコピー/ペーストしてメッセージを送信しなければならないときは、しばしばイライラします。彼らのサイトのフォームから直接やりたいです。また、このアプローチでは、匿名のコメントを送信することもできます。ただし、キャプチャなどの何らかのアンチボット スキームを使用してフォームを保護してください。ここSOで議論されているものはたくさんあります。

于 2009-01-27T13:34:47.543 に答える
16

reCAPTCHA でメール アドレスを保護できます。reCAPTCHA は無料のサービスを提供しているため、メールを見るには CAPTCHA (コンピュータと人間を区別するための完全に自動化された公開チューリング テスト) を入力する必要があります: https://www.google.com/recaptcha /admin#mailhide

于 2008-10-02T17:52:14.173 に答える
16

考えられるあらゆる種類の解析トリック (さまざまな種類の HTML エンティティ、URL エンコーディング、コメント、複数行の属性、ソフト ハイフン、mailto: URL の非自明な構造など) を使用するエンコーダー( source ) を作成しました。

すべてのハーベスターを停止するわけではありませんが、OTOH は完全に標準に準拠しており、ユーザーに対して透過的です。

別の私見の良いアプローチ(トリッキーなエンコーディングに加えて使用できる)は、次の行に沿っています。

<a href="mailto:userhatestogetspam@example.com" 
   onclick="this.href=this.href.replace(/hatestogetspam/,'')">
于 2008-11-17T21:18:43.517 に答える
11

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);
?>
于 2009-01-27T12:40:05.953 に答える
9

私の答えが多くの人に気に入られないことはわかっていますが、否定する前に、ここで概説されている点を考慮してください.

機械で簡単に読み取れるものは、スパマーが簡単に機械で読み取ることができます。彼らの行動は私たちにはばかげているように見えますが、彼らは愚かな人ではありません。彼らは革新的で機知に富んでいます。彼らはボットを使用して電子メールを収集するだけでなく、自由に使用できる方法がたくさんあり、それに加えて、新鮮な電子メールのリストにお金を払っているだけです。つまり、彼らは世界中に何千人ものブラックハット ハッカーを雇い、彼らの仕事を遂行させたということです。他の人のブラウザの画面をスクレイピングするマルウェアをコーディングする準備ができている人は、最終的にはあなたが達成しようとしている方法を役に立たなくします. このスレッドはすでに 10 人以上に読まれており、彼らは私たちを笑っています。彼らの何人かは、私たちが彼らに新しい挑戦をすることができないことを知って、涙を流すことさえあるかもしれません.

最終的には自分の時間を節約しようとしているのではなく、他の人の時間を節約しようとしていることを覚えておいてください. このため、ここで余分な時間を費やすことを検討してください。簡単に実行できる魔法の弾丸はありません。サイトで 100 人の電子メールを公開している会社で働いていて、1 人あたり 1 日あたり 1 通のスパム メールを減らすことができる場合、年間 36500 通のスパム メールについて話していることになります。そのような電子メールを削除するのに平均で 5 秒かかるとすると、年間 50 時間の作業時間になります。煩わしさの軽減は言うまでもありません。では、これに数時間を費やしてみませんか?

時間を資産と考えるのは、あなたと電子メールを受信する人々だけではありません。したがって、電子メール アドレスを難読化する方法を見つけて、クラックしても報われないようにする必要があります。電子メールを難読化するために広く使用されている方法を使用する場合、それを解読することは本当に報われます。その結果、クラッカーは、数万または数十万ではないにしても、数千の新しい電子メールを手に入れることになるからです。そして彼らのために、彼らはお金を得るでしょう。

それでは、独自のメソッドをコーディングしてください。これは、車輪の再発明が本当に報われるまれなケースです。機械可読ではなく、できればユーザー エクスペリエンスを犠牲にすることなく、ある程度のユーザー操作が必要な方法を使用してください。

私が言いたいことの例をコード化するのに約 20 分を費やしました。この例では、私が KnockoutJS を使用したのは、私が気に入ったからであり、おそらくあなた自身は使用しないだろうとわかっているからです。でもやっぱり関係ない。これは、広く使用されていないカスタム ソリューションです。それをクラックしても、それを行うことに対する報酬はありません。それを行う方法は、広大なインターネットの単一のページでしか機能しないからです.

これがフィドルです:http://jsfiddle.net/hzaw6/

以下のコードは、適切なコードの例ではありません。しかし、機械が理解するのが非常に難しいコードの簡単なサンプルにすぎません。ここで電子メールを処理することさえできます。たとえそれができたとしても、大規模に実行することは報われません。

はい、「未定義または null 参照のプロパティ「属性」を取得できない」ため、IE = lte8 では機能しないことはわかっていますが、実際の実装ではなくメソッドの単なるデモであるため、気にしません。そのまま本番環境で使用することは意図されていません。よりクールで、技術的により堅牢な独自のコードを自由にコーディングしてください.

ああ、html や javascript でメールやメールに名前を付けることは決してありません。DOM と window オブジェクトをスクレイピングして、mail や email という名前のものを探し出し、そこに電子メールと一致するものが含まれているかどうかを確認するのは簡単すぎます。これが、完全な形式の電子メールを含む変数を使用したくない理由であり、そのような変数を割り当てる前に、ユーザーがページと対話する必要がある理由でもあります。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);
于 2013-08-24T13:23:32.507 に答える
8

16 進数のhtml エンティティを使用して文字を非表示にすることができます(例: @ の場合は @)。これは便利な解決策です。適切なブラウザーが翻訳してくれるので、通常のリンクを作成できます。欠点は、ボットが理論的に翻訳できることですが、少し変わっています。ブログのメール保護に使っています。

もう 1 つの解決策は、javascript を使用してアドレスの一部を組み立て、オンザフライでアドレスをデコードすることです。欠点は、javascript が無効になっているブラウザではアドレスが表示されないことです。

最も効果的な解決策は画像を使用することですが、アドレスを手動でコピーする必要があるのは面倒です。

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

onclick="this.href='mailto:' + 'admin' + '&#x40;' + 'domain.com'"
于 2009-01-27T13:44:22.127 に答える
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>

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

于 2010-08-03T09:39:29.760 に答える
6

私は気にしないでしょう-それは間違ったレベルでSPAM戦争と戦っています。特に会社のWebサイトの場合、mailtoハイパーリンクを含むページにストレートテキスト以外のものがあると、非常に専門的ではないように見えると思います。

非常に多くのスパムが飛び交っているので、とにかく適切なフィルタリングが必要です。ボットは、とにかくすべての一般的なトリックを理解することになります。

于 2008-10-02T17:50:22.960 に答える
6

HTML:

<a href="#" class="--mailto--john--domain--com-- other classes goes here" />

JavaScript、jQueryを使用:

// match all a-elements with "--mailto--" somehere in the class property
$("a[class*='--mailto--']").each(function ()
{
    /*
    for each of those elements use a regular expression to pull
    out the data you need to construct a valid e-mail adress
    */
    var validEmailAdress = this.className.match();

    $(this).click(function ()
    {
        window.location = validEmailAdress;
    });
});
于 2008-10-02T18:16:47.530 に答える
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);
});

これが実際の例です。

于 2015-05-27T08:05:12.157 に答える
3

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

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

答えはありません。

于 2009-01-27T12:28:35.367 に答える
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>
于 2009-01-27T12:29:51.620 に答える
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

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

于 2013-01-03T11:06:49.410 に答える
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>
于 2016-05-12T00:11:21.977 に答える
3

気にしません。洗練されたユーザーを苛立たせ、洗練されていないユーザーを混乱させるだけです。他の人が言ったように、Gmail は個人/小規模ビジネス ドメインに非常に効果的なスパム フィルターを提供し、企業フィルターも一般的に非常に優れています。

于 2008-10-02T19:58:30.157 に答える
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>

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

于 2009-01-27T12:29:37.423 に答える
2

最も安全な唯一の方法は、もちろん、最初から電子メール アドレスを Web ページに掲載しないことです。

于 2008-10-02T18:07:13.950 に答える
2

代わりに連絡フォームを使用してください。すべての電子メールアドレスをデータベースに入れ、HTML フォーム (件名、本文、送信者など) を作成して、ユーザーがフォームに入力する電子メールの内容を送信します (使用される ID または名前とともに)。データベースでその人の電子メールアドレスを検索する) サーバーサイドスクリプトに送信し、指定した人に電子メールを送信します。メールアドレスが公開されることは決してありません。スパムボットを抑止するために、何らかの形式の CAPTCHA を実装することもできます。

于 2008-10-02T18:28:48.500 に答える
2

1 つの可能性は、isTrustedプロパティ (Javascript) を使用することです。

Event インターフェイスの isTrusted 読み取り専用プロパティはブール値であり、イベントがユーザー アクションによって生成された場合は true になり、イベントがスクリプトによって作成または変更された場合、または EventTarget.dispatchEvent() を介してディスパッチされた場合は false になります。

たとえば、あなたの場合:

getEmail() {
  if (event.isTrusted) {
    /* The event is trusted */
    return 'your-email@domain.com';
  } else {
    /* The event is not trusted */
    return 'chuck@norris.com';
  }
}

⚠IE非対応!

ドキュメントから詳細を読む: https://developer.mozilla.org/en-US/docs/Web/API/Event/isTrusted

于 2020-09-12T16:12:09.303 に答える
1

まず、JavaScriptを有効にしている場合にのみメールアドレスが表示されるようにします。このように、javascriptなしで読むことができるプレーンテキストはありません。

<button>次に、安全な機能を実装する方法は、タグから離れることです。このタグには、タグの間にテキストを挿入する必要があります。これにより、コンピューターで読み取り可能になります。代わり<input type="button">に、onClickのjavascriptハンドラーを試してください。次に、otherseが言及したすべての手法を使用して、安全な電子メール表記を実装します。

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

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

于 2009-01-27T18:39:35.260 に答える
1

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

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

于 2009-01-27T12:31:38.607 に答える
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>
于 2012-11-08T03:37:38.677 に答える
1

自分のメールアドレスについては、あまり気にしないことをお勧めします。何千人ものユーザーがあなたのメール アドレスを利用できるようにする必要がある場合は、Gmail アドレス (バニラまたは Google アプリ経由) を使用するか、高品質のスパム フィルターを使用することをお勧めします。

ただし、他のユーザーのメールアドレスをウェブサイトに表示する場合、ある程度の注意が必要だと思います。幸いなことに、Silvan Mühlemann という名前のブロガーがすべての難しい作業を行ってくれました。彼は 1 年半にわたってさまざまな難読化方法をテストし、最良のものを決定しました。それらのほとんどは、ブラウザでアドレスを正しく表示できるようにする CSS または JavaScript のトリックを含みますが、自動スクレイパーを混乱させます。

于 2009-11-06T12:46:21.760 に答える
1

HTML_CHARACTER はどうですか?:

joe&#064;mail.com

出力

joe@mail.com
于 2013-04-29T20:23:48.850 に答える
1

無料の Gmail には素晴らしいスパム フィルターがあります。

Gmail を直接使用したくない場合は、メールを gmail に送信し、迷惑メール フィルターを通過した後に gmail 転送を使用して返信することができます。

より複雑な状況では、@business.com アドレスを表示する必要がある場合、public@business.com を表示して、このすべてのメールを gmail アカウントに転送し、gmail アカウントから real@business.com に転送することができます。

あなたの質問に対する直接的な解決策ではないと思いますが、役立つかもしれません。Gmail は無料で、優れたスパム フィルタを備えているため、Gmail を使用するのは非常に賢明な選択です。

Gmail アカウントで 1 日あたり約 100 通のスパムを受信して​​いますが、そのうちの 1 つが最後に受信トレイに届いたのがいつだったか思い出せません。

要約すると、Gmail であろうと別のものであろうと、優れたスパム フィルターを使用してください。表示されている電子メール アドレスをユーザーに再入力または変更させることは、DRM を使用して著作権侵害から保護するようなものです。「善良な」人に負担をかけることは、何かをする方法であってはなりません。:)

于 2008-10-02T19:12:26.680 に答える
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 つの方法を使用します。

于 2013-10-13T20:14:38.883 に答える
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 
于 2014-03-06T07:18:17.793 に答える
1

私はwhateverDOC@whatever.comを作成し、その横に「大文字を削除」と書きます

于 2008-10-02T18:05:54.843 に答える
1

別のおそらくユニークな手法は、複数の画像といくつかのプレーンテキスト文字を使用して住所を表示することです。ボットを混乱させる可能性があります。

于 2008-10-02T18:16:14.490 に答える
0

それはあなたのニーズが正確に何であるかによって異なります。私が使用しているほとんどのサイトでは、連絡が必要な人にシステムから電子メールを送信する「連絡先/私たち」フォームを作成する方がはるかに便利であることがわかりました。これがまさにあなたが求めている解決策ではないことは承知していますが、ハーベスティングから完全に保護します。これまでのところ、そのようなフォームからスパムが送信されたことはありません。それは起こりますが、それは非常にまれであり、収穫されることはありません.

これにより、必要に応じて、メッセージを送信する前にメッセージをログに記録して、連絡先を失うことに対する保護レベルを高めることもできます。

于 2008-10-02T18:36:22.367 に答える
0

電子メール アドレスを png ファイルに保存するスクリプトは安全なソリューションです (十分なスペースがあり、ページに画像を埋め込むことが許可されている場合)。

于 2008-10-02T18:26:20.067 に答える
0

これは私たちが使用するものです(VB.NET):

Dim rxEmailLink As New Regex("<a\b[^>]*mailto:\b[^>]*>(.*?)</a>")
Dim m As Match = rxEmailLink.Match(Html)
While m.Success
    Dim strEntireLinkOrig As String = m.Value
    Dim strEntireLink As String = strEntireLinkOrig
    strEntireLink = strEntireLink.Replace("'", """") ' replace any single quotes with double quotes to make sure the javascript is well formed
    Dim rxLink As New Regex("(<a\b[^>]*mailto:)([\w.\-_^@]*@[\w.\-_^@]*)(\b[^>]*?)>(.*?)</a>")
    Dim rxLinkMatch As Match = rxLink.Match(strEntireLink)
    Dim strReplace As String = String.Format("<script language=""JavaScript"">document.write('{0}{1}{2}>{3}</a>');</script>", _
                RandomlyChopStringJS(rxLinkMatch.Groups(1).ToString), _
                ConvertToAsciiHex(rxLinkMatch.Groups(2).ToString), _
                rxLinkMatch.Groups(3), _
                ConvertToHtmlEntites(rxLinkMatch.Groups(4).ToString))
    Result = Result.Replace(strEntireLinkOrig, strReplace)
    m = m.NextMatch()
End While

    Public Function RandomlyChopStringJS(ByVal s As String) As String
        Dim intChop As Integer = Int(6 * Rnd()) + 1
        Dim intCount As Integer = 0
        RandomlyChopStringJS = ""
        If Not s Is Nothing AndAlso Len(s) > 0 Then
            For Each c As Char In s.ToCharArray()
                If intCount = intChop Then
                    RandomlyChopStringJS &= "'+'"
                    intChop = Int(6 * Rnd()) + 1
                    intCount = 0
                End If
                RandomlyChopStringJS &= c
                intCount += 1
            Next
        End If
    End Function

Render をオーバーライドし、これを介して送信 HTML を実行してから、送信します。これにより、ブラウザには通常どおりレンダリングされる電子メール アドレスがレンダリングされますが、ソースでは次のようになります。

<script language="JavaScript">document.write('<a '+'clas'+'s='+'"Mail'+'Link'+'" hr'+'ef'+'="ma'+'ilto:%69%6E%66%6F%40%62%69%63%75%73%61%2E%6F%72%67">&#105;&#110;&#102;&#111;&#64;&#98;&#105;&#99;&#117;&#115;&#97;&#46;&#111;&#114;&#103;</a>');</script>

明らかに絶対確実というわけではありませんが、うまくいけば、訪問者にとって物事を難しくすることなく、ある程度の収穫を減らすことができます.

于 2008-10-02T18:28:47.377 に答える
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>
于 2011-09-05T13:24:51.637 に答える
0

私は ofaurax の回答が一番気に入っていますが、これをもう少し隠しメールに変更します。

onclick="p1='admin'; p2='domain.com'; this.href='mailto:' + p1 + '& #x40;' + p2"
于 2012-12-31T05:27:28.537 に答える
0

スパム ボットはいずれ独自の Javascript および CSS エンジンを持つようになるため、この方向に目を向けるべきではないと思います。

于 2010-03-06T13:22:45.597 に答える
0

オプション 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 
于 2014-03-06T07:21:38.117 に答える