从垃圾邮件机器人隐藏电子邮件的有效方法

aba*_*hev 185 html email algorithm spam

在我的主页上,我正在使用此方法隐藏垃圾邮件机器人的电子邮件:

<a href="admin [at] example.com"
   rel="nofollow"
   onclick="this.href='mailto:' + 'admin' + '@' + 'example.com'">Contact me</a>
Run Code Online (Sandbox Code Playgroud)

你怎么看待这件事?有效吗?您还知道或使用其他哪些方法?

Fuh*_*tor 96

这是我所使用的方法,与服务器侧包括,例如<!--#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>
Run Code Online (Sandbox Code Playgroud)

要包含地址,我使用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>
Run Code Online (Sandbox Code Playgroud)

因为自2005年以来我一直通过Gmail收到电子邮件,所以垃圾邮件几乎不是问题.所以,我不能说这种方法有多有效.你可能想要阅读这个产生这个图的研究(尽管它已经很老了):

在此输入图像描述

  • 最新,最完​​整的研究探索同一个想法:http://www.grall.name/posts/1/antiSpam-emailAddressObfuscation.html (3认同)

cyp*_*tus 85

使用CSS中的内容和attr:

.cryptedmail:after {
  content: attr(data-name) "@" attr(data-domain) "." attr(data-tld); 
}
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

当javascript被禁用时,只有点击事件不起作用,仍会显示电子邮件.

另一种有趣的方法(至少没有点击事件)是利用从右到左的标记来覆盖书写方向.更多关于这个:https://en.wikipedia.org/wiki/Right-to-left_mark

  • 这需要更多的赞美. (6认同)
  • 真棒.但是在onclick-event上附加一个"; return false".这样可以防止将#添加到浏览器URL中(通过取消原始的href-link) (3认同)
  • 但是 - 我无法手动复制(可见)邮件地址(在Chrome,Firefox或Edge中)? (3认同)

rou*_*sis 82

看看这种方式,非常聪明并使用CSS.

CSS

span.reverse {
  unicode-bidi: bidi-override;
  direction: rtl;
}
Run Code Online (Sandbox Code Playgroud)

HTML

<span class="reverse">moc.rehtrebttam@retsambew</span>
Run Code Online (Sandbox Code Playgroud)

然后,上面的CSS将覆盖读取方向,并以正确的顺序将文本呈现给用户.

希望能帮助到你

干杯

  • 这肯定很有趣.但不幸的是,这不是可点击的,不适用于复制/粘贴,而忽略了任何非CSS浏览器,如盲文阅读器. (50认同)
  • 将反向电子邮件地址与RegEx匹配就像将其与非反向匹配一样简单.垃圾邮件是一项价值十亿美元的业务,而垃圾邮件发送者甚至没有使用自己的CPU周期来屏蔽屏幕.事实上,他们已经阅读了这个对话,并相应地调整了他们的方法.计算机可读的任何东西都将被机器人读取.无论是由CSS还是JavaScript执行. (6认同)
  • @JaniHyytiäinen我不同意.他们不支付CPU的事实并不意味着他们拥有无限的资源.如果运行JS解释器的成本太少,那么他们就会禁用它. (2认同)

tva*_*son 52

我对此有一个完全不同的看法.我使用MailHide.

MailHide是Google的一个系统,用户需要完成reCAPTCHA测试,然后向他们显示电子邮件.

  • 虽然此链接可能会回答这个问题,但最好在此处包含答案的基本部分并提供参考链接.如果链接的页面发生更改,则仅链接的答案可能会无效. (13认同)
  • 虽然我普遍同意这种观点,但在这种情况下,答案是使用特定工具.如果链接消失了,我会删除答案. (5认同)
  • 请注意,Google在2018年比赛时禁用了MailHide.与"免费"Google服务一样:只要他们可以从中获取数据,他们就会提供这些服务,一旦他们得到他们需要的东西,他们就会放弃它.最不可靠的公司提供免费服务.如果您需要转发任何您想要做的事情,我会远离谷歌或任何其他人的服务. (4认同)

And*_*ift 49

最初不是我的想法,但我找不到作者:

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

添加尽可能多的x.它非常适合读取,复制和粘贴,并且无法由机器人读取.

  • 如果javascript被禁用,我的网站都没有工作;-) (28认同)
  • 只要您的地址不包含任何x,就可以正常工作.:-p但是,我知道,只需使用另一个字母. (4认同)
  • 整洁的!但是移动用户呢? (2认同)

rme*_*dor 16

我认为唯一可以实现的万无一失的方法是创建一个"联系我"页面,该页面是一个提交到发送到您的电子邮件地址的脚本的表单.这样,您的地址根本不会暴露给公众.出于某种原因,这可能是不合需要的,但我认为这是一个非常好的解决方案.当我被迫将某人的电子邮件地址从他们的网站复制/粘贴到我的邮件客户端并向他们发送消息时,它经常让我感到烦恼; 我宁愿通过他们网站上的表单来做到这一点.此外,这种方法允许您向您发送匿名评论等.请确保使用某种反机器人方案(如验证码)保护您的表单.这里讨论了很多关于SO的内容.

  • 这可能会隐藏您的电子邮件地址,但它根本不会阻止垃圾邮件,除非您使用验证码图像验证脚本保护您的表单. (12认同)
  • 唯一的问题是,除非您花时间将其复制并粘贴到其他位置,否则您没有所发送邮件的副本.我个人不介意复制和粘贴,但他们自己. (6认同)
  • 至于发件人没有副本:对于网络上的多种表格,我喜欢自己选择复制的选项.但是,通常这样的选项允许滥用匿名向任何人发送消息...... (6认同)

Gal*_*ian 15

请参阅网页上的机器人安全地建立电子邮件地址?

我喜欢Facebook和其他人呈现您的电子邮件地址图像的方式.

我过去也曾使用过The Enkoder--说老实说非常好!


Mat*_*ias 10

如果你有php支持,你可以这样做:

<img src="scriptname.php">
Run Code Online (Sandbox Code Playgroud)

和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);
?>
Run Code Online (Sandbox Code Playgroud)


Jan*_*nen 9

我知道很多人都不会喜欢我的答案,但请在翻阅之前考虑一下这里列出的要点.

任何易于机器读取的东西都很容易被垃圾邮件发送者读取.即使他们的行为对我们来说似乎很愚蠢,但他们并不是愚蠢的人.他们是创新和足智多谋的.他们不只是使用机器人来收集电子邮件,他们有大量的方法供他们使用,除此之外,他们只需支付新的电子邮件清单.这意味着,他们在全球范围内有成千上万的黑帽黑客来执行他们的工作.人们准备编写恶意软件的代码,这些恶意软件会刮掉其他人浏览器的屏幕,这些浏览器最终会使您尝试实现的任何方法变得毫无用处.这个帖子已被10多个这样的人读过,他们在嘲笑我们.他们中的一些人可能甚至无聊地流泪,发现我们无法对他们提出新的挑战.

请记住,您最终并不是想节省您的时间,而是节省其他人的时间.因此,请考虑在此花些时间.没有易于执行的魔术子弹可行.如果您在一家在网站上发布100个人的电子邮件的公司工作,并且每人每天可以减少1封垃圾邮件,我们每年都在谈论36500封垃圾邮件.如果删除这样的电子邮件平均需要5秒钟,我们每年谈论50个工作小时.更不用说减少烦恼了.那么,为什么不花几个小时呢?

不仅是您和接收电子邮件的人认为时间是资产.因此,您必须找到一种以这种方式对电子邮件地址进行模糊处理的方法,这样就无法破解它.如果你使用一些广泛使用的方法来混淆电子邮件,那么破解它真的是值得的.因此,如果不是数十或数十万封新鲜的电子邮件,那么饼干将会获得成千上万的信息.对他们来说,他们会得到钱.

所以,继续编写自己的方法.这是一个罕见的情况,重新发明轮子真的得到回报.使用非机器可读的方法,并且优选地需要一些用户交互而不牺牲用户体验.

我花了大约20分钟来编写一个我的意思的例子.在这个例子中,我使用KnockoutJS只是因为我喜欢它而且我知道你不会自己使用它.但无论如何它都无关紧要.这是一种未广泛使用的定制解决方案.破解它不会对此做出奖励,因为这样做的方法只能在广阔的互联网上的单个页面上工作.

这是小提琴:http://jsfiddle.net/hzaw6/

下面的代码并不是一个好代码的例子.但只是快速的代码示例,很难让机器弄清楚我们甚至在这里处理电子邮件.即使可以做到,也不会为大规模执行而付出代价.

是的,我知道它对IE = lte8不起作用,因为'无法获取未定义或空引用的属性'属性'但我只是不在乎,因为它只是方法的演示,而不是实际的实现,并不打算用于生产.随意编写自己的代码,这是更酷,技术上更坚固等.

哦,永远不会用html或javascript命名邮件或电子邮件.对于任何名为邮件或电子邮件的东西来说,刮掉DOM和窗口对象太简单了,并检查它是否包含与电子邮件匹配的内容.这就是为什么你不希望任何变量包含电子邮件的完整形式,这也是你希望用户在分配这些变量之前与页面交互的原因.如果您的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>
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)


ofa*_*rax 7

您可以尝试使用hexa中的html实体隐藏字符(例如:@表示@).这是一个方便的解决方案,因为正确的浏览器会将其翻译,您可以拥有正常的链接.缺点是机器人可以理论上翻译它,但它有点不寻常.我用它来保护我博客上的电子邮件.

另一种解决方案是使用javascript来组装地址的一部分并在运行中解码地址.缺点是禁用javascript的浏览器不会显示您的地址.

最有效的解决方案是使用图像,但用户必须手动复制地址是一件痛苦的事.

您的解决方案非常好,因为您只为已禁用javascript的用户添加了一个缺点(手动编写@).你也可以更加安全:

onclick="this.href='mailto:' + 'admin' + '&#x40;' + 'domain.com'"
Run Code Online (Sandbox Code Playgroud)


Sim*_*les 7

我最喜欢的方法之一是使用php来混淆电子邮件地址,一个典型的例子是将字符转换为HEX值,如下所示:

function myobfiscate($emailaddress){
 $email= $emailaddress;                
 $length = strlen($email);                         
 for ($i = 0; $i < $length; $i++){                
 $obfuscatedEmail .= "&#" . ord($email[$i]).";";
 }
 echo $obfuscatedEmail;
}
Run Code Online (Sandbox Code Playgroud)

然后在我的标记中,我将简单地称之为:

<a href="mailto:<?php echo myobfiscate('someone@somewhere.com')" title="Email me!"><?php echo myobfiscate('someone@somewhere.com');</a>
Run Code Online (Sandbox Code Playgroud)

然后检查你的来源,你会惊喜万分!


Aar*_*sau 5

Spambots不会解释这一点,因为它是一个鲜为人知的方法:)

首先,定义css:

email:before {
    content: "admin";
}

email:after {
    content: "@example.com";
}
Run Code Online (Sandbox Code Playgroud)

现在,无论您要显示电子邮件的何处,只需插入以下HTML:

<div id="email"></div>
Run Code Online (Sandbox Code Playgroud)

和田田!