스팸 봇에서 이메일을 숨기는 효과적인 방법


196

내 홈페이지에서이 방법을 사용하여 전자 메일을 스팸봇으로부터 숨 깁니다.

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

당신이 그것에 대해 어떻게 생각하십니까? 효과적입니까? 다른 방법을 알고 있거나 사용하고 있습니까?


이것은 stackoverflow.com/questions/163628/… 의 복제 이거나 커뮤니티 위키가 아닌 긴 목록이기 때문에 유효하지 않습니다.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功 2014

5
이것은 더 많은 투표, 답변 및 견해를 가지고 있습니다. 찬성, 답변 및 견해가 적은 다른 사람들에게 유리하게 닫혀서는 안됩니다.
abatishchev

1
나는이 것이 훨씬 더 매력적이라는 사실을 따르기 위해 그 하나를 닫을 것입니다.
abatishchev

6
가장 좋은 솔루션은 솔루션 을 공유하지 않는 것입니다 . 불행히도 이것은 그런 종류의 질문입니다. 솔루션을 찾아 자신에게 유지하는 것이 가장 좋습니다. 스팸봇이 표준화되면 스팸봇이이를 극복하도록 조정됩니다.
Dimitris 2016 년

1
가장 좋은 해결책은 아래의 여러 솔루션을 결합하는 것입니다 . 예를 들어 이미지로 이메일의 첫 번째 부분, 두 번째 부분 this.href.replace(/x/g,''), 16 진수로 인코딩 된 부분 등 이메일 주소.

답변:


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을 통해 이메일을 받고 있기 때문에 스팸은 문제가되지 않습니다. 따라서이 방법이 얼마나 효과적인지 말할 수 없습니다. 이 그래프를 생성 한이 연구 를 읽으십시오 (구식이기는하지만).

여기에 이미지 설명을 입력하십시오


왜 서버 측 포함이 필요 emailObfuscator.include합니까? 평범한 .html로 작성하는 것과 같지 않습니까? (아마도 예일 뿐입니 까?) 또한 <!-- -->스크립트 내에서 html 주석을 사용하는 이유는 무엇입니까? 마지막으로 왜 <script>태그 중 하나 가 소문자이고 다른 태그가 대문자 <SCRIPT>입니까? 이러한 방법이 봇이나 무언가를 혼동시키는 데 도움이됩니까?
Templar

@Templar SSI는 필요하지 않으며 내가 아는 한 봇을 혼동하지 않습니다. 내 사이트를 모듈 식으로 만들었습니다 (이 방법을 더 이상 사용하지 마십시오). 의견은 내가 해킹을 찾은 곳의 출처 (현재 끊어진 링크)를 인용하고있었습니다. 경우의 변화는 단지 우연입니다. 봇을 혼동한다면 더 나아지지만 효과가 의심됩니다.
Fuhrmanator

4
같은 아이디어를 탐구하는 더 최근의 완전한 연구 : grall.name/posts/1/antiSpam-emailAddressObfuscation.html
Lucas Cimon

96

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>

자바 스크립트를 사용 중지하면 클릭 이벤트 만 작동하지 않고 이메일이 계속 표시됩니다.

또 다른 흥미로운 접근 방식은 (적어도 클릭 이벤트가없는) 오른쪽에서 왼쪽으로 표시하여 쓰기 방향을 무시하는 것입니다. 이에 대한 자세한 내용 : https://en.wikipedia.org/wiki/Right-to-left_mark


6
더 많은 추천이 필요합니다.
heXer

이유는 확실하지 않지만이 솔루션은 상당히 인상적이지만 이메일 클라이언트를 트리거하지 못합니다. jsfiddle.net/wd436tg3
Ricardo Zea

1
@RicardoZea 어떤 브라우저를 사용하십니까? 당신의 바이올린은 크롬, 즉 11, 엣지 및 파이어 폭스에서 잘 작동합니다
cyptus

3
대박. 그러나 onclick-event에 "; return false"를 추가하십시오. 이렇게하면 브라우저 URL에 #가
잘못

5
그러나 (보이는) 메일 주소 (Chrome, Firefox 또는 Edge)를 수동으로 복사 할 수 없습니까?
T4NK3R

83

이 방법을 보고 , 영리하고 CSS를 사용하십시오.

CSS

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

HTML

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

위의 CSS는 읽기 방향을 무시하고 텍스트를 올바른 순서로 사용자에게 표시합니다.

그것이 도움이되기를 바랍니다.

건배


54
확실히 재미있다. 그러나 불행히도 이것은 클릭 할 수 없으며 점자 리더와 같은 CSS가 아닌 브라우저는 무시하고 복사 / 붙여 넣기에는 작동하지 않습니다.
Arjan

Mhh는 좋지만 크롤러를 쓰는 사람들이 그것을 본다면 쓸모가 없게됩니다.
Mau

6
리버스 이메일 주소를 RegEx와 일치시키는 것은 반전되지 않은 것과 일치하는 것만 큼 쉽습니다. 스팸은 수십억 달러 규모의 비즈니스이며 스팸 발송자는 자체 CPU주기를 사용하여 화면을 긁지 않습니다. 실제로, 그들은 이미이 대화를 읽고 그에 따라 방법을 조정했습니다. 봇은 컴퓨터에서 읽을 수있는 모든 것을 읽을 수 있습니다. CSS 또는 JavaScript로 실행되는지 여부
Jani Hyytiäinen

3
@ JaniHyytiäinen 동의하지 않습니다. 그들이 CPU 비용을 지불하지 않는다고해서, 그들이 무제한 자원을 가지고 있다는 것을 의미하지는 않습니다. JS 인터프리터를 실행하면 비용이 너무 적은 주소를 생성하는 것으로 밝혀지면 비활성화합니다.
o0 '.

1
@Lohoris : Google은 평균 페이지로드 시간 (2.45 초)과 평균 페이지 크기 (320KB)를보고하며, 얼마나 많은 파싱을 수행 할 수 있는지에 대한 아이디어를 제공합니다. 다운로드 스레드가 요청을 수행하는 동안 구문 분석 스레드가 구문 분석을 수행 할 수 있습니다. 다운로드의 대부분이 기다리고 있습니다. 이는 dl 스레드가 구문 분석기로 보내기 전에 전제 조건을 점검 할 수있는 가능성을 제공합니다. 예를 들어 렌더링 페이지, indexOf ( '@'), indexOf ( 'mailto :') 등. 구문 분석 스레드는 일치하는 주위에 + -200 문자 만 수신하므로 너무 복잡한 구문 분석이 허용되어 무한대로 나타납니다. 파싱 ​​능력의 조건.
Jani Hyytiäinen

52

나는 이것과 완전히 다른 것을 가지고 있습니다. MailHide 를 사용 합니다.

MailHide는 Google의 시스템으로, 사용자가 reCAPTCHA 테스트를 완료 한 후 이메일을 공개해야합니다.


15
이 링크가 질문에 대답 할 수 있지만 여기에 답변의 필수 부분을 포함시키고 참조 할 수있는 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않을 수 있습니다.
showdev

5
일반적으로이 정서에 동의하지만이 경우에는 특정 도구를 사용하는 것이 좋습니다. 링크가 사라지면 답변을 삭제합니다.
tvanfosson

감사합니다 — 이것은 훌륭합니다. 나는 다음과 같은 것을 쓰고있다 (공개는 링크이다) : 나에게 이메일을 보내라 : reveal
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

링크를 터치하면 마우스 오버도 트리거됩니다. 잘 작동합니다.
앤드류 스위프트

4
주소에 x가 포함되어 있지 않는 한 작동합니다. :-p 그러나 나는 다른 편지를 사용합니다.
Dan Henderson

1
그러나 자바 스크립트가 비활성화되면 존재하지 않는 주소를 사용자에게 제시하여 고객 / 사용자를 잃어 버릴 수 있습니다.
Xeevis

34
자바 스크립트가 비활성화되어 있으면 내 사이트가 전혀 작동하지 않습니다 ;-)
Andrew Swift

16

당신이 가질 수있는 유일한 방법은 전자 메일 주소로 보내는 스크립트에 제출하는 양식 인 Contact Me 페이지를 만드는 것입니다. 그렇게하면 주소가 전혀 공개되지 않습니다. 이것은 어떤 이유로 바람직하지 않을 수 있지만 꽤 좋은 해결책이라고 생각합니다. 사이트에서 다른 사람의 이메일 주소를 내 메일 클라이언트로 복사 / 붙여 넣어야하는 경우가 종종 있습니다. 오히려 사이트의 양식을 통해 올바르게하고 싶습니다. 또한이 방법을 사용하면 익명으로 의견을 보낼 수 있습니다. 보안 문자와 같은 일종의 안티 봇 방식을 사용하여 양식을 보호하십시오. SO에 대해서는 여기에서 많이 논의했습니다.


6
이것의 유일한 문제는 다른 곳에 복사하여 붙여 넣는 데 시간이 걸리지 않으면 보낸 메시지의 사본이 없다는 것입니다. 개인적으로 나는 복사하여 붙여 넣기를 원하지 않고 각자에게 붙여 넣습니다.
gvkv 2016 년

6
발신자가 사본을 가지고 있지 않은 경우 웹에서 많은 종류의 양식을 위해 사본을 직접 얻을 수있는 옵션을 좋아합니다. 그러나 종종 그러한 옵션은 익명으로 누군가에게 메시지를 보내는 악용을 허용합니다.
Arjan

12
이렇게하면 전자 메일 주소가 숨겨 질 수 있지만 보안 문자 이미지 유효성 검사 스크립트로 양식을 보호하지 않으면 스팸이 전혀 중단되지 않습니다.
SimonDowdles

1
또한 발신자에게 사본을 보낼 수있는 옵션을 포함시켜 사본이없는 문제를 해결할 수도 있습니다.
steinybot 2016 년

1
"자신에게 사본 보내기"옵션-보낸 사람과 함께 양식을 스팸 캐논으로 효과적으로 전환합니다-나쁜 생각입니다!
T4NK3R


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

1
PHP를 사용하는 대신 실제로 이미지를 만들 수 있습니다. 그리고 CSS 반전과 마찬가지로 여전히 클릭 할 수없는 문제가 있으며 펜을 사용하지 않으면 복사 할 수 없습니다 : P
Claudiu

9

나는 많은 사람들이 내 대답을 좋아하지 않는다는 것을 알고 있지만 엄지 손가락을 아래로 내리기 전에 여기에 요약 된 사항을 고려하십시오.

스패머는 쉽게 머신을 읽을 수있는 모든 머신을 쉽게 읽을 수 있습니다. 그들의 행동은 우리에게는 어리석은 것처럼 보이지만 어리석은 사람들은 아닙니다. 혁신적이고 수완이 뛰어납니다. 그들은 전자 메일을 수집하기 위해 봇을 사용하는 것이 아니라, 처분 할 수있는 다양한 방법을 가지고 있으며, 게다가 신선한 전자 메일 목록을 지불하기 만하면됩니다. 의미하는 바는 전 세계적으로 수천 명의 블랙 햇 해커가 작업을 수행하도록했습니다. 사람들은 다른 사람들의 브라우저 화면을 긁어 악성 코드를 코딩 할 준비가되어 결국 쓸모없는 방법을 만들어냅니다. 이 스레드는 이미 10 명 이상의 사람들이 읽었으며 우리를 비웃고 있습니다. 그들 중 일부는 눈물을 흘리며 새로운 도전을 할 수 없다는 것을 알게 될 수도 있습니다.

결국 시간을 절약하려는 것이 아니라 다른 사람의 시간을 절약한다는 것을 명심하십시오. 이 때문에 여기에서 여분의 시간을 보내십시오. 작동하기 쉬운 마술 총알은 없습니다. 사이트에 100 명의 사람들의 전자 메일을 게시하는 회사에서 일하고 있으며 하루에 1 개의 스팸 전자 메일을 줄일 수 있다면 1 년에 약 36500 개의 스팸 전자 메일이 사용됩니다. 이러한 이메일을 삭제하는 데 평균 5 초가 걸리면 매년 약 50 시간의 근무 시간을 말합니다. 감소 된 성가심은 말할 것도 없습니다. 그렇다면 이것에 몇 시간을 보내지 않겠습니까?

시간과 자산을 고려하는 것은 전자 메일을받는 사람과 여러분 만이 아닙니다. 따라서 전자 메일 주소를 난독 처리하는 방법을 찾아야합니다. 널리 사용되는 방법을 사용하여 전자 메일을 난독 처리하면 실제로 전자 메일을 해독하는 데 도움이됩니다. 결과적으로 크래커는 수만 또는 수십만 개의 신선한 이메일이 아니라도 수천 건의 손을 잡을 것입니다. 그리고 그들에게 돈을 얻을 것입니다.

계속해서 자신 만의 메소드를 코딩하십시오. 이것은 바퀴를 재발 명하는 것이 실제로 드문 경우입니다. 기계 판독 가능하지 않은 방법과 사용자 경험을 희생시키지 않으면 서 사용자 상호 작용이 필요한 방법을 사용하십시오.

나는 약 20 분 동안 내가 의미하는 바를 코드화했습니다. 이 예에서는 KnockoutJS를 사용했기 때문에 간단히 사용하고 직접 사용하지 않을 것입니다. 그러나 어쨌든 관련이 없습니다. 널리 사용되지 않는 맞춤형 솔루션입니다. 크래킹은 방대한 인터넷에서 단일 페이지에서만 작동하기 때문에 크래킹은 보상이되지 않습니다.

바이올린은 다음과 같습니다. http://jsfiddle.net/hzaw6/

아래 코드는 좋은 코드의 예가 아닙니다. 그러나 기계가 이해하기 어려운 간단한 코드 샘플 만 여기에서 전자 메일을 처리하기까지합니다. 그리고 그것이 가능할지라도 큰 규모의 집행을 위해 돈을 지불하지 않을 것입니다.

그리고 네, '정의되지 않은 또는 null 참조의 속성'속성 '을 가져올 수 없기 때문에 IE = lte8에서 작동하지 않는다는 것을 알고 있지만 실제 구현이 아닌 메서드 데모이므로 간단하지 않습니다. 프로덕션 환경에서 그대로 사용해서는 안됩니다. 더 시원하고 기술적으로 더 견고한 등을 직접 코딩하십시오.

아, 절대로 html 또는 javascript로 메일이나 이메일 이름을 지정하지 마십시오. 메일이나 이메일이라는 이름의 DOM과 창 객체를 긁어 전자 메일과 일치하는 항목이 있는지 확인하는 것은 너무 쉬운 방법입니다. 그렇기 때문에 전체 형식의 전자 메일을 포함하는 변수를 원하지 않는 이유는 이러한 변수를 할당하기 전에 사용자가 페이지와 상호 작용하도록하는 이유이기도합니다. 자바 스크립트 개체 모델에 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

내가 가장 좋아하는 방법 중 하나는 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 디코딩을 사용하는 SpamBots에 대한 단서가 있습니까?
jasonflaherty

7

16 진수로 html 엔티티를 사용하여 문자를 숨길 수 있습니다 (예 : @ : & # x40). 이는 올바른 브라우저가 번역하므로 일반적인 솔루션 일 수 있으므로 편리한 솔루션입니다. 단점은 봇이 이론적으로 번역 할 수 있지만 약간 특이합니다. 나는 이것을 사용하여 내 블로그의 전자 메일을 보호합니다.

또 다른 해결책은 javascript사용 하여 주소의 일부를 어셈블하고 주소를 즉시 디코딩하는 것입니다. 단점은 자바 스크립트가 비활성화 된 브라우저가 주소를 표시하지 않는다는 것입니다.

가장 효과적인 해결책은 image사용하는 것이지만 사용자가 직접 주소를 복사해야하는 것은 고통스러운 일입니다.

자바 스크립트가 비활성화 된 사용자에 대해서만 단점 (@을 수동으로 작성) 만 추가하기 때문에 솔루션이 꽤 좋습니다 . 다음과 같이 더 안전 할 수도 있습니다.

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

5

Spambots는 덜 알려진 방법이기 때문에 이것을 해석하지 않습니다. :)

먼저 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를 구현해야합니다.
Sergiu

안타깝게도 아니요, 링크를 처음으로 가리킬 때 (me@example.spam) 올바른 href 값이 표시되지 않습니다. 두 번째 호버에서 모든 것이 정상이었습니다. 자신의 링크로 테스트하십시오.
Nik O'Lai

1
Chrome 및 IE에서 작동합니다. Firefox에서는 첫 번째 호버에서는 상태 표시 줄이 업데이트되지 않는 것처럼 보입니다. Firefox 용 솔루션을 찾으려고 노력하겠습니다.
Sergiu

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

쉬운 방법 중 하나는 실제 문자 대신 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>


1
Google은 많은 페이지를 찾을 수 있습니다. 예를 들면 다음과 같습니다. hp.vector.co.jp/authors/VA022023/javascript/…
Romain Linsolas

4
그러나 봇도 그렇게 쉽게 정규 표현식을 사용할 수 없었습니까?
gargantuan 2016

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를 해석하는 크롤러가 있습니까? JavaScript 인코딩 방법은 지난 몇 년 동안 잘 작동하는 것 같습니다. 스팸 률은 주당 ~ 4로 상당히 꾸준히 유지되었으므로이 방법에 위임 한 다른 사람의 주소에 대해 걱정하지 않았습니다. 내가해야합니까?
Kev

확실히, 그것은 많은 크롤러를 제외시킬 수 있지만, 주소 크롤러를
만들면

생각보다 더 많은 노력
익명 겁쟁이

Google은 현재 일부 JS를 크롤링하고 있습니다.
Alister Bulman 2016 년

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

2

저는 SpamSpan 의 팬입니다. 난독 처리되었지만 JS가 비활성화되어 있으면 여전히 해독 할 수 있습니다. 트래픽이 적은 웹 사이트에서 약 1 년 동안 만 사용해 왔지만 작동하는 것 같습니다.

필요한 경우 Drupal에서 전자 메일을 SpamSpans로 자동 전환하는 모듈도 있습니다.


1

링크를 마우스 오른쪽 버튼으로 클릭하고 "URL 복사"를 선택하면 작동합니까? 그렇지 않은 경우 이상적인 상황이 아닙니다 (mailto 링크를 거의 클릭하지 않고 전자 메일 주소를 복사하여 내 메일 응용 프로그램에 붙여 넣기를 선호하거나 특정 시점에 필요할 때마다 붙여 넣기를 선호 함).

예전에는 메일 주소를 온라인 (UseNet, 웹 등)으로 보호하는 편집증이 있었지만 요즘에는 더 많은 "스팸 ​​대상"이 실제로 로컬 부분을 프로그래밍 방식으로 도메인과 일치시켜 생성한다고 생각합니다. 나는 때때로 메일 서버 로그를 훑어 본 것에 근거를두고있다. 존재하지 않는 주소에 대한 배달 시도는 꽤 적습니다 (주소 스크래핑이 널리 퍼져 있던 90 년대 후반 유즈넷에 매달린 스팸 미끼 버전 포함).


1

너무 많은 기술을 사용한 후에는 쉬운 방법과 매우 친숙한 것을 발견했습니다. 봇은 @ Símbolo를 검색하고 최근에는 변형을 검색하므로 2 가지 기술을 사용합니다.

  1. domaintollss 사용과 같은 이미지에 내 이메일을 쓰고 완벽하게 작동하거나
  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

먼저 자바 스크립트를 활성화했을 때만 전자 메일 주소가 표시되도록하십시오. 이런 식으로 자바 스크립트없이 읽을 수있는 일반 텍스트는 없습니다.

둘째, 안전한 기능을 구현하는 방법은 <button>태그 에서 벗어나는 것 입니다. 이 태그는 태그 사이에 텍스트 삽입이 필요하므로 컴퓨터에서 읽을 수 있습니다. 대신 <input type="button">onClick에 대한 자바 스크립트 핸들러로 시도하십시오 . 그런 다음 otherse가 언급 한 모든 기술을 사용하여 안전한 이메일 표기법을 구현하십시오.

다른 옵션은 "이메일 주소를 보려면 클릭하십시오"단추가있는 것입니다. 클릭하면 코드화 된 이메일 (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-일반 텍스트 이메일 주소가 있습니다.
Alister Bulman 2016 년

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 퍼팅이라는 두 가지 방법을 사용합니다.


1

옵션 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 : "@"대신 AT를 사용하고 ""대신 DOT를 사용할 수 있습니다.

즉 :

 info(AT)XXXabc(DOT)com 

1
옵션 1은 좋은 옵션이 아니라고 생각합니다. 봇과 함께 실행되는 파서는 innerHTML의 가치를 쉽게 파악할 수 있으며, 스마트 봇이 알아낼 수 있기 때문에 옵션 3은 아마도 좋지 않을 것입니다. 옵션 2가 최고라고 생각합니다.
John Sonderson

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.