web-dev-qa-db-ja.com

Webページ上のボットから電子メールアドレスを安全にするには?

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

[email protected]

または巧妙なトリックを使用して、メールアドレスハーベスターボットをだましてみませんか?例えば:

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("êïå®óïíåâïäùÀãïíðáîù®ãïí");

人間のデコード:

[email protected]

joe.somebody AT company.com

何を使っているのですか?

45
Gary Willoughby

私は一般的に気にしないでください。私はかつて毎日数千のスパムを受け取るメーリングリストにいました。私たちのスパムフィルター(spamassassin)は、1日1回か2回通過させます。フィルターがこれほど良いのに、なぜ正当な人があなたに連絡するのを難しくするのですか?

47
tloach

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

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

そのため、One Trueメールアドレスの難読化手法を探すのではなく、独自の手法を考え出してください。これらのボットの作成者は、あなたのサイトを気にせず、少しクレイジーなレンダリング-テキスト-css-and-element-bordersまたは完全に奇妙な、簡単にクラックされるJavaScript暗号化を迂回するために何かを書いているわけではありません。 。それが取るに​​足らないことであるかどうかは関係ありません、誰もあなたをスパムすることができるようにそれを迂回しようとする気になりません。

26
Dan

私は encodersource )を記述しました。これは、考えられるあらゆる種類の解析トリック(さまざまな種類のHTMLエンティティ、URLエンコーディング、コメント、複数行属性、ソフトハイフン、mailtoのわかりにくい構造:URLなど)

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

(トリッキーなエンコーディングに加えて使用できる)別のIMHOの良いアプローチは、次のようなものです。

<a href="mailto:[email protected]" 
   onclick="this.href=this.href.replace(/hatestogetspam/,'')">
16
Kornel

ReCAPTCHAを使用してメールアドレスを保護できます。無料のサービスが提供されるため、人々はCAPTCHA(完全に自動化されたパブリックチューリングテスト)を入力してメールを確認する必要があります。 https://www.google .com/recaptcha/admin#mailhide

15
GavinCattell

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

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

7
Rob Walker

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;
    });
});
5
cllpse

A response 私の同様の質問:

私はCSSとjQueryの非常に単純な組み合わせを使用しています。これは、ユーザーに電子メールアドレスを正しく表示し、アンカーがクリックされたときにも機能します。

HTML:

<a href="mailto:[email protected]" 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);
});

ここ は実際の例です。

3
Sergiu

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

3
Phil

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

2
Bill

もちろん、最も安全な方法は、最初に電子メールアドレスをWebページに挿入しないことです。

2
gabr

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

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

1
Wedge

メールアイコンジェネレーターをお試しください。 http://services.nexodyne.com/email/

もちろん、これを取得できるOCRボットはまだいくつかあります。

1
prakash

私は[email protected]を自分のものにして、その隣に「大文字を削除する」と書きます

1
Joe Phillips

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

1
Joe Phillips

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

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

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

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

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

要約すると、Gmailかどうかにかかわらず、適切なスパムフィルターを使用します。表示されている電子メールアドレスをユーザーに再入力または変更させることは、DRMを使用して海賊行為から保護することに似ています。 「善良な」男に負担をかけることは、何かをするための方法ではありません。 :)

1
tbate

これは私たちが使用するものです(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

レンダリングをオーバーライドし、ドアを出る前に、これを介して出力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>

明らかに間違いのないものではありませんが、訪問者に困難をもたらすことなく、収穫量をある程度削減できれば幸いです。

0
Herb Caudill

スパムボットは、時間の経過とともに独自のJavaScriptおよびCSSエンジンを使用するようになるため、この方向に目を向けるべきではないと思います。

0
ychaouche

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

また、必要に応じて、メッセージを送信する前にログに記録して、連絡先が失われないように保護することができます。

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

次のようにコーディングしました。それが良いかどうかは分かりませんが、プレーンテキストでメールを書くよりはましです。多くのロボットがだまされますが、すべてではありません。

<script type="text/javascript">
    $(function () {
        setTimeout(function () {
            var m = ['com', '.', 'domain', '@', 'info', ':', 'mailto'].reverse().join('');

            /* Set the contact email url for each "contact us" links.*/
            $('.contactUsLink').prop("href", m);
        }, 200);
    });
</script>

ロボットがこれを解決する場合、ロボットはとにかくコードを評価するだけなので、「if(1 == 1? '@': '')」のような「単純なロジック」コードを追加したり、配列要素を別の順序で追加したりする必要はありません。 。

0
Sasse

フォントの素晴らしい作品!

<link rel="stylesheet" href="path/to/font-awesome/css/font-awesome.min.css">

<p>myemail<i class="fa fa-at" aria-hidden="true"></i>mydomain.com</p>

http://fontawesome.io/

0
Ogun Adebali

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

0
Prog