150

ここ数日、個人のウェブサイトの更新に取り組んでいました。私の個人的なウェブサイトの URL は (私の名).(私の姓).com です。私の姓はかなり珍しいので、幸運にもドメイン名を取得することができました。私の電子メール アドレスは (名字)@(名字).com です。本当に、それを推測することになると、それほど難しくありません。

とにかく、私は mailto: リンクを私のウェブサイトに統合したいので、人々は私に連絡することができます. また、私の電子メール アドレスは推測するのがそれほど難しくありませんが、電子メール アドレスのパターンを求めて Web サイトをクロールし、データベースに追加するだけのスパム ボットによって収集されたくありません。

電子メール アドレスを難読化するには、できればリンク形式にするのが最善の方法は何ですか? 私が知っている方法は次のとおりです。

<a href="mailto:x@y.com">e-mail me</a>

これは機能しますが、私の Web サイトが Google にヒットするとすぐに、スパム ボットが私の電子メール アドレスを簡単に見つけ出すため、スパムを処理することになります。

<img src="images/e-mail.png" />

訪問者がクリックして電子メールを送信できなくなるだけでなく、より賢いスパム ボットが画像に含まれる文字を検出できる可能性があるため、これはあまり望ましくありません。

おそらく完璧な解決策はないことはわかっていますが、みんながどう考えるのが最善なのか疑問に思っていました. 私のウェブサイトでは既に大量の JavaScript を使用しているため、必要に応じて JavaScript を使用したいと思っています。

4

30 に答える 30

115

文字を HTML エンティティとしてエンコードします (このようなもの)。JS を有効にする必要はなく、ほとんどのスパムを阻止したようです。スマートボットはまだそれを収穫するかもしれないと思いますが、問題はありませんでした.

于 2009-04-14T18:29:01.867 に答える
86

個人的には、メールアドレスを非公開にすることをあきらめました。難読化を心配するよりも、より優れたスパム フィルタリング ソリューションを調べる方が簡単だと思います。アドレスを難読化する最善の方法を見つけるために何日も費やすことができます。その後、1 人の人物がアドレスをスパマーに売り渡すだけで、その作業はすべて無駄になります。

于 2009-04-14T18:29:38.760 に答える
69

現在受け入れられている解決策は、ユーザーがあなたにメールを送信できる連絡フォームを作成することです。そこから大量のスパムを受信する場合 (私のサイトにはありません)、適切な手段としてキャプチャを追加できます。その時点で「容易に達成できる成果」にはほど遠いでしょう。

問題は、ユーザーがリンクをクリックしてメール クライアントを開き、To: フィールドにあなたのアドレスを入力できるリンクを提供している場合、コンピューターはそのページからメール アドレスを解読できるということです。スパムボット。

于 2009-04-14T18:28:32.897 に答える
45

あなたはこれがあなたの個人的なウェブサイトのためであると言いました。私の個人的なサイト(たとえば、bobsomers.com)には、次のような段落があります。

新しいサイトが立ち上がる前に私と連絡を取る最良の方法は、私にメールを送ることです。私のメールアドレスは、このWebサイトでの私の名です。そのヒントからそれを理解できない場合は、まあ、私のアドレスを理解するよりも、電子メールの方が難しいと感じるかもしれません。

私はいつも合法的な電子メールを受け取っているので、人々はそれをうまく理解できるようです。最良のソリューションでは、コードを記述する必要がない場合があります。:)

于 2009-04-15T01:56:02.587 に答える
28

hrefアンカーを難読化する軽量な方法は、base64 エンコードすることです。

> btoa('mailto:email@example.com')
< "bWFpbHRvOmVtYWlsQGV4YW1wbGUuY29t"

そして、ハードコードされたものを含めます:

<a href="javascript:window.location.href=atob('bWFpbHRvOmVtYWlsQGV4YW1wbGUuY29t')">E-Mail</a>

または動的にサーバー側、たとえば PHP で:

<a href="javascript:window.location.href=atob('<?= base64_encode("mailto:email@example.com") ?>')">E-Mail</a>

文字列の復帰と組み合わせることで、かなりスパムを防ぐことができます:

<a href="javascript:window.location.href=atob('<?= base64_encode("mailto:email@example.com") ?>')" style="unicode-bidi: bidi-override; direction: rtl;"><?= strrev("email@example.com") ?></a>
于 2016-09-13T08:45:06.043 に答える
15

どうやらCSS を使用してテキストの方向を変更すると、かなりうまく機能するようです。そのリンクには、他の難読化方法のテストもあります。

何を使っても必然的に敗北する。あなたの主な目的は、ユーザーを困らせないようにすることです。

于 2009-04-14T18:34:33.883 に答える
12

ここでは難読化手法を使用しないでください。おそらく、電子メール ハーベスターが、人々がどのように電子メールを難読化しているかを調べるために最初に調べる場所だからです。自分のメールアドレスをサイトに表示する必要がある場合は、他人の方法をそのままコピーしないでください。他のサイトが使用していない独自の方法で難読化して、ハーベスターがサイトにアクセスする前にメソッドが知られないようにします。

于 2009-04-14T18:26:28.877 に答える
8

Google コード (およびグループ) で Google が行うようにできます。メールの一部とクリック可能な部分 (「...」) を表示します。電子メールを知りたいことを示すクリックすると、キャプチャを入力するよう求められます。その後、メール (およびその他のメール) が表示されます。

于 2009-04-14T18:33:10.250 に答える
7

私が管理しているWebサイトの1つは、スパムボットを(うまくいけば)排除するためのやや単純なJavaScript手段を使用しています。

電子メールリンクはJS関数を呼び出します。

関数sendEmail(名前、ドメイン){
    location.href ='mailto:'+名前+'@'+ドメイン;
}

JSを有効にしているユーザーのみがリンクを表示できるようにするには、次のように書き留めます。

関数writeEmailLink(realName、name、domain){
    document.write('<a href = "javascript:sendEmail(\''
      +名前+'\'、\''+ドメイン+'\') ">');
    document.write(realName);
    document.write('</a>');
}   

1つのJS関数を使用して別の関数を呼び出すリンクを書き出すことは、2つの保護層があることを意味します。

于 2009-04-14T22:17:22.693 に答える
6

私は JavaScript の難読化を使用しています。たとえば、これを見てください。

http://www.jottings.com/obfuscator/

于 2009-04-14T18:26:47.927 に答える
5

上のポスターが言ったように、私はjottings ウェブサイトの JavaScript 難読化も使用しています。

Web ページは、改善可能な JavaScript を生成します。テキスト文字列は明確で、ロボットによって識別可能です(mailto:ロボットはこれを見つけて、この文字列の難読化を解除することができますmailto:addr@site.tld) addr@site.tldmailto:生成された JavaScript から、電子メールとはまったく関係がないように見える JavaScript が突然発生します。Web にはランダムな JavaScript があふれています。リンク テキストを削除することで、これをさらに改善することができます。私は、私の電子メール アドレスの画像をかなりわかりにくいフォントで置き換えました。次に、jottings.com でこの方法が一般的になった場合に備えて、出力 JavaScript の変数名をランダム化して、ロボットが jottings で生成された JavaScript コードのインスタンスを見つけにくくしました。

明らかに、これらの改善の一部はメモ自体のメカニズムに組み込むことができます。コードは公開されているため、これは比較的簡単です。

例は、これをもう少し明確にするかもしれません。上記のリンクにある Jottings Obfuscator を使用して、「Send Me Email」というテキストを使用して、メモを次の Javascript に変換して不明瞭にしました (メモの代わりにmailto:foo@bar.com文字列を入力して、メモ Web サイトの本来の意図をごまかしていることに注意してください)。mailto:foo@bar.comfoo@bar.com

<script type="text/javascript" language="javascript">
<!--
// Email obfuscator script 2.1 by Tim Williams, University of Arizona
// Random encryption key feature by Andrew Moulden, Site Engineering Ltd
// This code is freeware provided these four comment lines remain intact
// A wizard to generate this code is at http://www.jottings.com/obfuscator/
{ coded = "3A1OTJ:rJJ@VAK.GJ3"
  key = "J0K94NR2SXLupIGqVwt8EZlhznemfaPjs7QvTB6iOyWYo3rAk5FHMdxCg1cDbU"
  shift=coded.length
  link=""
  for (i=0; i<coded.length; i++) {
    if (key.indexOf(coded.charAt(i))==-1) {
      ltr = coded.charAt(i)
      link += (ltr)
    }
    else { 
      ltr = (key.indexOf(coded.charAt(i))-shift+key.length) % key.length
      link += (key.charAt(ltr))
    }
  }
document.write("<a href='mailto:"+link+"'>Send Me Email</a>")
}
//-->
</script><noscript>Sorry, you need Javascript on to email me.</noscript>

それを取り戻したら、それをエディターに貼り付けて、次のようにします。

  1. を削除しますmailto:
  2. リンク テキストをメール アドレスの画像へのポインタに置き換える
  3. すべての変数の名前を変更します
  4. 「noscript」セクションをメールアドレス画像への別のリンクに置き換えます

私はこれで終わります:

<script type="text/javascript" language="javascript">
<!--
// Email obfuscator script 2.1 by Tim Williams, University of Arizona
// Random encryption kkeoy feature by Andrew Moulden, Site Engineering Ltd
// This kudzu is freeware provided these four comment lines remain intact
// A wizard to generate this kudzu is at http://www.jottings.com/obfuscator/
{ kudzu = "3A1OTJ:rJJ@VAK.GJ3"
  kkeoy = "J0K94NR2SXLupIGqVwt8EZlhznemfaPjs7QvTB6iOyWYo3rAk5FHMdxCg1cDbU"
  shift=kudzu.length
  klonk=""
  for (variter=0; variter<kudzu.length; variter++) {
    if (kkeoy.indexOf(kudzu.charAt(variter))==-1) {
      lutu = kudzu.charAt(variter)
      klonk += (lutu)
    }
    else {
      lutu = (kkeoy.indexOf(kudzu.charAt(variter))-shift+kkeoy.length) % kkeoy.length
      klonk += (kkeoy.charAt(lutu))
    }
  }
document.write("<a href='"+klonk+"'><img src='contactaddressimage.png' alt='Send Me Email' border='0' height='62' width='240'></a>")
}
//-->
</script>
<noscript>
    <img src="contactaddressimage.png" border="0" height="62" width="240">
    <font face="Arial" size="3"><br>&nbsp;</font></p>
</noscript>
于 2013-02-22T18:30:54.517 に答える
3

これがうまくいくかどうかはわかりません。ページの読み込みが完了したら、メール アドレスを省略して、AJAX 呼び出しを使用して読み込ませることはできませんか。スパム ボットが改ざんされた HTML を検出できるのか、それとも他の HTTP トラフィックをリッスンして電子メール アドレスを選択しようとするほど巧妙なのか、それとも最初に受信したページをスキャンするだけなのかは不明です。

于 2009-04-14T20:13:10.353 に答える
2

ある男性は、ページにメールアドレスを表示する 9 つの異なる方法をテストし、その結果をブログで公開しました。

彼の 3 つの最良の方法は次のとおりです。

  1. CSSでコードの向きを変える
  2. CSS 表示の使用:なし
  3. ROT13 暗号化

警告 -- これは 2 年前に投稿されたものです。スパムボットはより賢くなったかもしれません。

于 2010-08-03T19:38:21.730 に答える
1

PHP を使用している場合は、それを自動的に行う無料のスクリプトを入手できます。それは「Private Daddy」と呼ばれ、独自のオンライン オーディオ ストリーミング サービスに使用しています。たった 1 行のコードですぐに使用できます...ここから取得できます

于 2009-12-23T15:27:59.920 に答える
0

誰でも Rails を使用している場合は、actionview-encoded_mail_togem を使用できます。( https://github.com/reed/actionview-encoded_mail_to )

いくつかのオプションがあります:

:encode - このキーは文字列 "javascript" または "hex" を受け入れます。「javascript」を渡すと、mailto リンクが動的に作成およびエンコードされ、ページの DOM に評価されます。ユーザーが JavaScript を無効にしている場合、このメソッドはページにリンクを表示しません。「hex」を渡すと、mailto リンクを出力する前に email_address が 16 進エンコードされます。

:replace_at - リンク名が指定されていない場合、email_address がリンク ラベルに使用されます。このオプションを使用して、@ 記号を値として指定された文字列に置き換えることで、email_address を難読化できます。

:replace_dot - リンク名が指定されていない場合、email_address がリンク ラベルに使用されます。このオプションを使用して、.email_address を難読化できます。値として指定された文字列を含む電子メールで。

于 2014-05-24T15:17:57.900 に答える
0

正直なところ、mailto が本当に使いたいものかどうかという質問をした場合、問題は意味がないかもしれません。たとえば、Web メールを使用したり、ブラウザに適切なメール クライアントが設定されていない多くの人は、mailto の恩恵を受けません。大部分のユーザーには機能しない機能のためにメール アドレスを公開しています。

代わりにできることは、フォームを使用して舞台裏で電子メールを送信することです。これにより、電子メール アドレスが隠され、mailto の恩恵を受けられない貧しい人々について心配する必要がなくなります。

于 2009-04-14T18:30:56.200 に答える
0
<!-- Multi-Email Obfuscator  -->
<!-- step 1: &#064; = @  -->
<!-- step 2: a scrap element  -->
<!-- step 3: ROT13 encode for .com  -->
info<!-- step 1 -->&#064;<!-- step 2 --><b style="display:none">my</b>domain<!-- step 3 --><script>document.write(".pbz".replace(/[a-zA-Z]/g,function(c){return String.fromCharCode((c<="Z"?90:122)>=(c=c.charCodeAt(0)+13)?c:c-26);}));</script>
于 2015-09-10T05:34:39.830 に答える
-1

PHP関数を使用して、ページの読み込み時に電子メールを出力するJavaScriptを生成します。実行時にJSを生成するためにPHPは必要ないことに注意してください。ローカルで一度JSを生成してから、静的JSをページに含めることができます。

以下のこのスニペットとリンクされた関数を使用して、特定のHTML($ processedContentはHTML)の電子メールアドレスを自動的に難読化することもできます。

 $emailMatches = array();
 $matchCount = preg_match_all('/(?:[a-zA-Z0-9_\.\-])+\@(?:(?:[a-zA-Z0-9\-])+\.)+(?:[a-zA-Z0-9]{2,4})+/', $processedContent, $emailMatches);

 if($matchCount > 0) {
    $emailMatches = $emailMatches[0];

    foreach($emailMatches as $email) {
    $replacement = createJSMailLink($email);

    $processedContent = str_replace($email, createJSMailLink($email), $processedContent);
 }
于 2010-11-26T18:00:19.007 に答える
-2

これをチェックしてください。

「Enkoder フォーム」は、電子メール アドレスを暗号化し、結果を自己評価 JavaScript に変換して、公開されたアドレスを探して Web をクロールする電子メール収集ロボットからそれを隠します。あなたのアドレスは Web ブラウザでは正しく表示されますが、電子メール収集ロボットには事実上判読できません。

于 2010-03-03T10:41:25.960 に答える