在我的主页上,我正在使用这种方法来隐藏垃圾邮件机器人的电子邮件:
<a href="admin [at] example.com"
rel="nofollow"
onclick="this.href='mailto:' + 'admin' + '@' + 'example.com'">Contact me</a>
你怎么看待这件事?有效吗 您还知道或使用其他哪些方法?
在我的主页上,我正在使用这种方法来隐藏垃圾邮件机器人的电子邮件:
<a href="admin [at] example.com"
rel="nofollow"
onclick="this.href='mailto:' + 'admin' + '@' + 'example.com'">Contact me</a>
你怎么看待这件事?有效吗 您还知道或使用其他哪些方法?
Answers:
这是我使用的方法,带有服务器端包含,例如<!--#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>
?这些方法是否有助于混淆机器人或其他东西?
在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>
禁用javascript后,仅单击事件将不起作用,仍会显示电子邮件。
另一种有趣的方法(至少没有单击事件)是利用从右到左的标记覆盖书写方向。有关此的更多信息:https : //en.wikipedia.org/wiki/Right-to-left_mark
看看这种方式,非常聪明,并使用CSS。
的CSS
span.reverse {
unicode-bidi: bidi-override;
direction: rtl;
}
的HTML
<span class="reverse">moc.rehtrebttam@retsambew</span>
然后,上述CSS会覆盖阅读方向,并以正确的顺序向用户显示文本。
希望能帮助到你
干杯
我对此有完全不同的看法。我为此使用MailHide。
MailHide是Google提供的系统,用户需要完成reCAPTCHA测试,然后向他们显示电子邮件。
最初不是我的主意,但找不到作者:
<a href="mailto:coxntact@domainx.com"
onmouseover="this.href=this.href.replace(/x/g,'');">link</a>
根据需要添加任意多个x。它非常适合读取,复制和粘贴,并且不能被机器人读取。
我认为您唯一的万无一失的方法就是创建“联系我”页面,该页面是一种形式,用于提交发送到您的电子邮件地址的脚本。这样,您的地址绝对不会公开。由于某些原因,这可能是不可取的,但是我认为这是一个很好的解决方案。当我被迫将某人的电子邮件地址从他们的网站复制/粘贴到我的邮件客户端并向他们发送消息时,这常常让我感到不舒服。我宁愿通过他们网站上的表格来做到这一点。此外,这种方法还允许您向您发送匿名评论等。只需确保使用某种反机器人方案(例如验证码)来保护您的表单即可。关于SO,这里有很多讨论。
如果您有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);
?>
我知道我的答案不会被很多人喜欢,但请在忽略之前考虑此处列出的要点。
垃圾邮件发送者会轻易地将任何易于机读的内容进行机器可读。即使他们的行为对我们来说是愚蠢的,他们也不是愚蠢的人。他们是创新和足智多谋的。他们不仅使用僵尸程序来收集电子邮件,还拥有许多可用的方法,除此之外,他们只是为新的电子邮件清单付费。这意味着,他们在全球范围内吸引了成千上万的黑帽黑客来执行其工作。准备编写恶意软件的人会刮擦其他人的浏览器的屏幕,最终使您试图实现的任何方法都变得无用。十多个这样的人已经阅读了此主题,他们在嘲笑我们。他们中的一些人甚至无聊地哭了,以至于我们无法对他们提出新的挑战。
请记住,您最终并不是在节省时间,而是在节省他人的时间。因此,请考虑在这里花一些额外的时间。没有容易执行的魔术子弹。如果您在一家在网站上发布100个人电子邮件的公司工作,并且每人每天可以减少1封垃圾邮件,那么我们说的是每年36500封垃圾邮件。如果删除此类电子邮件平均需要5秒钟,那么我们说的是每年50个工作小时。更不用说减少的烦恼了。那么,为什么不花几个小时呢?
不仅您和接收电子邮件的人都将时间视为一项资产。因此,您必须找到一种以这种方式混淆电子邮件地址的方法,以至于无法破解它。如果您使用某种广泛使用的方法来混淆电子邮件,那么破解它确实值得。因此,破解者将获得成千上万的电子邮件,即使不是成千上万。对于他们来说,他们将获得金钱。
因此,继续编写您自己的方法。在极少数情况下,重新发明轮子确实会奏效。使用一种不是机器可读的方法,并且最好是需要一些用户交互而不牺牲用户体验的方法。
我花了20分钟时间写出我的意思的例子。在该示例中,我之所以使用KnockoutJS仅仅是因为我喜欢它,并且我知道您可能不会自己使用它。但这无关紧要。这是一种自定义解决方案,尚未广泛使用。破解它不会带来任何回报,因为这样做的方法只会在庞大的互联网中的单个页面上起作用。
这是小提琴:http : //jsfiddle.net/hzaw6/
下面的代码并不代表一个好的代码。但是只是一小段简单的代码示例,机器很难弄清楚我们甚至在这里都处理电子邮件。即使可以做到,大规模执行也不会有回报。
是的,我确实知道它在IE = lte8上不起作用,因为“无法获得未定义或空引用的属性”属性”,但我根本不在乎,因为它只是方法的演示,而不是实际的实现,并且不打算原样用于生产。随意编写自己的代码,它更酷,技术上更牢固等。
哦,从来没有用html或javascript来命名邮件或电子邮件。对于任何名为mail或email的东西,刮取DOM和window对象,并检查它是否包含与电子邮件匹配的东西,太容易了。这就是为什么您不希望任何变量包含完整格式的电子邮件的原因,这也是为什么您希望用户在分配此类变量之前与页面进行交互。如果您的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>
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);
我最喜欢的方法之一是使用php混淆电子邮件地址,经典示例是将字符转换为十六进制值,如下所示:
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>
然后检查您的来源,您将惊喜不已!
您可以尝试使用html实体(十六进制)来隐藏字符(例如:&#x40表示@)。这是一个方便的解决方案,因为正确的浏览器会翻译它,并且您可以拥有正常的链接。缺点是机器人可以从理论上翻译它,但这有点不寻常。我用它来保护我在博客上的电子邮件。
另一个解决方案是使用javascript来汇编地址的一部分并即时解码地址。缺点是禁用JavaScript的浏览器不会显示您的地址。
最有效的解决方案是使用图像,但是用户必须手动复制地址是一件很痛苦的事情。
您的解决方案非常好,因为仅对禁用了javascript的用户添加了一个缺点(手动编写@)。您还可以使用以下方法更安全:
onclick="this.href='mailto:' + 'admin' + '@' + 'domain.com'"
Spambots不会解释这一点,因为它是一个鲜为人知的方法:)
首先,定义css:
email:before {
content: "admin";
}
email:after {
content: "@example.com";
}
现在,无论您要显示电子邮件的何处,只需插入以下HTML:
<div id="email"></div>
和田田!
我使用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);
});
这是一个工作示例。
!-添加此信息以供参考,不知道信息可能有多过时,但是它说明了一些简单的解决方案,不需要使用任何脚本
在我自己搜索之后,我不仅浏览了该页面,还浏览了以下页面:
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
将此与前面提到的任何方法结合使用,甚至可以使其更有效
一种简单的解决方案是使用HTML实体而不是实际字符。例如,“ me@example.com”将转换为:
<a href="mailto:me@example.com">email me</A>
这是我的工作版本:
在某个地方创建一个带有后备文本的容器:
<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>
直到机器人程序员发现此“编码”并实施解密算法后,隐藏电子邮件地址的最佳方法才有用。
JavaScript选项无法长期运行,因为有很多爬虫在解释JavaScript。
没有答案,恕我直言。
可能有一些漫游器将[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="mailto:?to=%2C%75%73%65%72%40%65%78%61%6D%70%6C%65%2E%63%6F%6D">mail me</a>
但是,由于使用它们是合法的,因此每个浏览器/电子邮件客户端也应处理这些编码。
在使用了很多技术之后,我发现了一种简单且非常友好的方法,机器人在搜索@Símbolo,最近他们搜索了[at] ant,它是变异的,所以我使用了2种技术
并且图片alt将为alt =“ @”,因此该漫游器将找到图片,任何人都将其视为正常地址,因此如果他复制了该图片,则将复制该电子邮件,而工作是don,因此代码为
<p>myname<img src="http://www.traidnt.net/vb/images/mail2.gif" width="11" height="9" alt="@" />domain.com</p>
有一个开放的许可PHP脚本,该脚本输出用于对邮件进行编码的javascript:http : //www.maurits.vdschee.nl/php_hide_email/。然后,您可以使用特定的邮件作为参数轻松调用php函数。
首先,我将确保仅在启用javascript后才显示电子邮件地址。这样,没有JavaScript就无法读取纯文本。
其次,一种实现安全功能的方法是远离<button>
标签。该标签需要在标签之间插入文本,以使其可被计算机读取。而是尝试<input type="button">
带有onClick的javascript处理程序的。然后使用其他提到的所有技术来实现安全的电子邮件符号。
另一种选择是使用“单击以查看电子邮件地址”按钮。单击后,将更改为已编码的电子邮件(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>
看看这是否是您想要的东西,并将其与他人的想法相结合。您永远不能太确定。
和我的功能。我是通过查看本主题中的答案创建的。
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 put。
选项1:将电子邮件地址分为多个部分,然后用JavaScript在这些部分之外创建一个数组。接下来,以正确的顺序加入这些部分,并使用.innerHTML属性将电子邮件地址添加到网页。
<span id="email"> </span> // blank tag
<script>
var parts = ["info", "XXXXabc", "com", ".", "@"];
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
我不喜欢将JavaScript和HTML混在一起,所以才使用此解决方案。暂时对我来说还不错。
想法:通过在data
-attributes中提供加密信息并在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/
HTML_CHARACTER呢?
joe@mail.com
输出
joe@mail.com
我只需要提供另一个答案。我刚想出了一些有趣的玩法。
我发现在许多常见的字符表中,字母@和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