웹 페이지의 봇에서 이메일 주소를 안전하게 만들 수 있습니까?

StackOverflow https://stackoverflow.com/questions/163628

  •  03-07-2019
  •  | 
  •  

문제

웹 페이지에 이메일 주소를 배치 할 때 다음과 같은 텍스트로 배치합니까?

joe.somebody@company.com

아니면 영리한 트릭을 사용하여 이메일 주소 수확기 봇을 속이고 속이는가? 예를 들어:

HTML 탈출 문자 :

joe.somebody@company.com

자바 스크립트 대해 :

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

당신은 무엇을 사용합니까 아니면 귀찮게합니까?

도움이 되었습니까?

해결책

나는 일반적으로 귀찮게하지 않습니다. 나는 매일 수천 스팸을 얻은 메일 링리스트에 있었다. 우리의 스팸 필터 (Spamassassin)는 하루에 1 ~ 2 명을 겪게합니다. 필터를 사용하면 합법적 인 사람들이 당신에게 연락하기가 어렵게 만드는 이유는 무엇입니까?

다른 팁

자신의 미친 이메일 주소 난독 화 방식을 발명하십시오. 일반적으로 알려진 방법과 너무 비슷하지 않은 한, 그것이 무엇인지는 중요하지 않습니다.

문제는 이것에 대한 좋은 해결책이 실제로 없다는 것입니다. 모두 우회하기가 비교적 간단하거나 사용자에게 자극적이라는 것입니다. 하나의 방법이 널리 퍼지면 누군가 ~ 할 것이다 주변의 길을 찾으십시오.

따라서 하나의 진정한 이메일 주소 난독 화 기술을 찾고 있지 않고 자신의 것을 생각해 내십시오. 이 봇 작가들은 사이트에 대해 충분히 신경 쓰지 않는다는 사실에 의존하십시오. 당신의 약간 미친 텍스트-텍스트-텍스트와 CSS 및 요소 거주지 또는 완전히 기괴하고 쉽게 쌓이는 JavaScript 암호화를 우회하기 위해 앉아 앉을만큼 충분히 신경 쓰지 않는다는 사실에 의존하십시오. . 그것이 사소한지는 중요하지 않습니다. 아무도 당신을 스팸으로 만들 수 있도록 그것을 우회하려고하지 않을 것입니다.

나는 썼다 인코더 (원천) 제가 생각할 수있는 모든 종류의 구문 분석 트릭을 사용합니다 (다른 종류의 HTML 엔티티, URL 인코딩, 댓글, 멀티 린 속성, 소프트 하이픈, 우편물의 비각화 된 구조 : URL 등)

모든 수확기를 멈추지는 않지만 Otoh는 사용자에게 전적으로 표준을 준수하고 투명합니다.

또 다른 IMHO 좋은 접근 방식 (까다로운 인코딩 외에 사용할 수있는)은 다음과 같습니다.

<a href="mailto:userhatestogetspam@example.com" 
   onclick="this.href=this.href.replace(/hatestogetspam/,'')">

Recaptcha로 이메일 주소를 보호 할 수 있으며, 무료 서비스를 제공하므로 사람들이 CAPTCHA (컴퓨터와 인간에게 알려주기 위해 완전히 자동화 된 공공 튜링 테스트)를 입력하여 이메일을 볼 수 있습니다. https://www.google.com/recaptcha/admin#mailhide

나는 귀찮게하지 않을 것입니다 - 그것은 스팸 전쟁과 잘못된 수준에서 싸우고 있습니다. 특히 회사 웹 사이트의 경우 Mailto 하이퍼 링크가있는 페이지에 직선 텍스트 이외의 다른 것이 있으면 문제가 발생하지 않는다고 생각합니다.

스팸이 너무 많아서 어쨌든 좋은 필터링이 필요하며 봇은 어쨌든 모든 일반적인 트릭을 이해하게됩니다.

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

나는 귀찮게하지 않는다. 정교한 사용자 만 성가 시게하고 정교하지 않은 사용자를 혼동합니다. 다른 사람들이 말했듯이 Gmail은 개인/소규모 비즈니스 도메인에 매우 효과적인 스팸 필터를 제공하며 회사 필터는 일반적으로 매우 좋습니다.

응답 비슷한 질문에 대한 내 것 :

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

여기 작업 예입니다.

가장 안전한 방법은 물론 이메일 주소를 웹 페이지에 처음으로 놓지 않는 것입니다.

대신 연락처 양식을 사용하십시오. 모든 이메일 주소를 데이터베이스에 넣고 사용자가 양식으로 작성하는 이메일의 내용을 제출하는 HTML 양식 (주제, 본문, ...)을 작성하십시오 (사용 된 ID 또는 이름과 함께 데이터베이스에서 해당 사람의 이메일 주소를 조회하여 서버 측 스크립트로 지정된 사람에게 이메일을 보냅니다. 전자 메일 주소가 노출되지는 않습니다. 당신은 아마도 스팸봇을 막기 위해 어떤 형태의 보안관을 구현하고 싶을 것입니다.

이메일 아이콘 생성기를 사용해보십시오.http://services.nexodyne.com/email/

물론 이것을 얻을 수있는 OCR 봇이 여전히 있습니다 ..

나는 뭐든지 내 뭐든지 내게 만들어 옆에 "대문자 제거"를 씁니다.

무료 인 Gmail에는 멋진 스팸 필터가 있습니다.

Gmail을 직접 사용하지 않으려면 이메일을 gmail로 보내고 Gmail 전달을 사용하여 스팸 필터를 통과 한 후 다시 보낼 수 있습니다.

보다 복잡한 상황에서@business.com 주소를 보여 주어야 할 때 public@business.com을 표시 하고이 메일을 Gmail 계정으로 전달하여 real@business.com으로 전달할 수 있습니다.

질문에 대한 직접적인 해결책이 아니지만 도움이 될 수 있습니다. Gmail은 무료이며 좋은 스팸 필터를 사용하면 매우 현명한 선택 IMHO를 사용합니다.

Gmail 계정에서 하루에 약 100 스팸을 받지만 마지막으로받은 편지함에 도착한 시간을 기억할 수 없습니다.

요약하려면 Gmail이든 다른 스팸 필터를 사용하십시오. 사용자가 표시된 이메일 주소를 다시 입력하거나 수정하는 것은 DRM을 사용하여 불법 복제로부터 보호하는 것과 같습니다. "좋은"사람에게 짐을 두는 것이 아무것도 할 수있는 방법이되어서는 안됩니다. :)

자신의 이메일 주소를 위해서는 너무 걱정하지 않는 것이 좋습니다. 수천 명의 사용자가 이메일 주소를 사용할 수 있도록 해야하는 경우 Gmail 주소 (바닐라 또는 Google Apps)를 통해 고품질 스팸 필터를 사용하는 것이 좋습니다.

그러나 웹 사이트에 다른 사용자 이메일 주소를 표시 할 때 어느 정도의 실사가 필요하다고 생각합니다. 운 좋게도 Silvan Mühlemann이라는 블로거가 있습니다 당신을 위해 모든 어려운 일을 끝냈습니다. 그는 1.5 년 동안 다양한 난독 화 방법을 테스트했으며 가장 좋은 방법을 결정했으며, 대부분은 브라우저에서 주소를 올바르게 제시 할 수있는 CSS 또는 JavaScript 트릭을 포함했지만 자동 스크레이퍼를 혼동합니다.

또 다른 독특한 기술은 여러 이미지와 몇 개의 일반 텍스트 문자를 사용하여 주소를 표시하는 것일 수 있습니다. 그것은 봇을 혼동 할 수 있습니다.

PNG 파일에 이메일 주소를 저장하는 스크립트는 안전한 솔루션입니다 (공간이 충분하고 페이지에 이미지를 포함 할 수있는 경우)

이것이 우리가 사용하는 것 (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>

분명히 멍청하지는 않지만 방문객을 위해 일을 어렵게 만들지 않고 어느 정도의 수확을 줄이기를 바랍니다.

그것은 당신의 요구가 정확히 무엇인지에 달려 있습니다. 내가 일하는 대부분의 사이트에서, 나는 "연락처/우리"양식을 넣는 것이 훨씬 더 유용하다는 것을 알았습니다. 나는 이것이 당신이 찾고있는 해결책이 아니라는 것을 알고 있지만 그것은 수확으로부터 완전히 보호하고 지금까지 나는 그런 형태를 통해 스팸을 보지 못했습니다. 그것은 일어날 것이지만 그것은 매우 드물며 당신은 결코 수확되지 않습니다.

이것은 또한 메시지를 보내기 전에 메시지를 기록 할 수있는 기회를 제공합니다.

스팸 봇에는 시간이 지남에 따라 자체 자바 스크립트 및 CSS 엔진이 있으므로이 방향으로 보지 말아야한다고 생각합니다.

옵션 1 : 이메일 주소를 여러 부분으로 나누고이 부분에서 JavaScript로 배열을 만듭니다. 다음 으로이 부분을 올바른 순서로 가입하고 .innerhtml 속성을 사용하여 웹 페이지에 이메일 주소를 추가하십시오.

 <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 : "@"대신 "대신"대신 "대신"대신 사용할 수 있습니다. "

즉 :

 info(AT)XXXabc(DOT)com 

방금 다음을 코딩했습니다. 그것이 좋은지 모르겠지만 일반 텍스트로 이메일을 작성하는 것이 좋습니다. 많은 로봇이 속지 않지만 전부는 아닙니다.

<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? '@': ':' ')와 같은"Simple Logic "코드를 추가 할 필요가 없습니다. 로봇이 어쨌든 코드를 발전시키기 때문에 다른 순서로 배열 요소를 추가합니다. .

글꼴이 좋은 작품!

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top