ChatGPT解决这个技术问题 Extra ChatGPT

如何在网站上显示电子邮件地址以避免垃圾邮件?

我在我的网站上显示电子邮件如下

 <a href="mailto:inf@example.com">Email</a>

但是我在使用 woorank.com 分析我的网站时阅读了以下内容,我应该怎么做才能避免这种情况?

恶意机器人会在网上搜索电子邮件地址,而纯文本电子邮件地址更有可能被发送垃圾邮件。

为了遵守 woorank,您可以做任何事情,从将其制作为图像到使用 javascript document.write 并分解电子邮件地址。要真正防止垃圾邮件......这是另一回事。
您会看到针对此问题的多种解决方案。一种方法是不将其设为链接,并打印 info -AT-example.com,这使用户在撰写消息时手动键入电子邮件地址。这与将电子邮件放入图像中基本相同——在这两种情况下,您都会删除链接。另一种解决方案是添加一个带有验证码的表单,该验证码提交到服务器,服务器验证验证码,然后在一切正常的情况下发送电子邮件。
@John这个问题用php标记但是这个问题用jsp标记,对于jsp编码器可能有更好的解决方案
这可能是有关此信息的 stackexchange 上最权威、最详尽的资源,应该可以回答您的所有问题:superuser.com/questions/235937/…

J
JazzyP

在过去,我已经看到使用 javascript 完成此操作。基本上,您将电子邮件地址分配给 javascript 变量并使用这些变量更改元素的内容。如果需要,您还可以为禁用 javascript 的用户提供后备,将他们指向表单的方向。这是一个例子

var user = 'foo',
    domain = 'bar.com',
    element = document.getElementById('email');

    element.innerHTML = user + '@' + domain;
    //OR
    //'<a href="mailto:' + user + '@' + domain + '">Email</a>'  

这种方式机器人永远不会看到电子邮件地址,因为它们不加载 javascript。


但是如果人们禁用了 JS,那么他们也看不到链接。需要为此目的的后备。它可以通过 <a href="mailto<!--comment-->me@... 或 <a href=""><span class="hidden">text</span> 来实现
J
Jani Hyytiäinen

好吧,你每天都可以想出不同的方法。这是一个使用jQuery的。

<a class="mail" href="mailto:john@badmail.mydomain.com">e-mail</a>

然后用 jQuery 处理点击。

$('a.mail').on('click', function(){
    var href = $(this).attr('href');
    $(this).attr('href', href.replace('badmail.', ''));
});

我喜欢这个的原因是,我可以让垃圾邮件发送者认为他们收到了另一封电子邮件,向虚拟邮件域发送垃圾邮件。如果我维护自己的垃圾邮件过滤器,我可以将样本收集到我的坏桶中。

此外,这种方法允许您使用动态数据来非常干净地呈现页面,并且只需在整个站点上只使用一次 javascript 片段来处理真实的用户点击。

也适用于手机。


我认为这种方法非常好。如果您显示的是电子邮件地址而不是“电子邮件”,那么请务必使用图像转换器。
我喜欢这些解决方案,您可以在其中给垃圾邮件发送者误报。总是比给他们一个他们很可能接受的挑战要好:p
C
Community

在网站上隐藏电子邮件有多种不同的选择,通常使用电子邮件地址的 HTML 实体版本(如 Aziz-Saleh 建议的那样),但从实际网页设计的角度来看,只需将电子邮件地址放在网站上不是最用户友好的事情。

例如,mailto: 链接会自动触发浏览器打开用户选择的电子邮件应用程序 - 但请考虑这一点。不是每个人都有专门的电子邮件应用程序。例如,我不使用 Outlook(我是 Windows 用户),除非我安装了 Windows Live Mail,否则我的计算机无法打开该链接。我认为如果您已登录,Chrome 可以打开指向 GMail 的链接,但我需要检查一下。

最终,通过使用 mailto:,您可能会疏远一部分用户群,他们一开始就无法使用该链接。

我建议使用电子邮件表单,并且有大量易于理解的教程适用于 PHP 和您的 JSP 语言,例如此链接:Sending Email in JSP 甚至在 { 2}

通过使用您的服务器发送电子邮件,您可以更严格地控制电子邮件的生成方式、允许用户输入哪些数据,您甚至可以向他们发送一封返回电子邮件(由服务器生成)以确认您有收到了他们的消息。这是一种久经考验的真实世界方法,允许客户和访客与您联系,同时仍为您提供保护和控制整个过程。

TL;DR:如果没有专门的电子邮件程序,原始 mailto: 链接可能会疏远人们,而如果您使用 JSP 表单,您可以控制他们如何与您联系,使用什么信息(您可以使用字段和 HTML5 required 属性来强制某些输入字段),您甚至可以回复 do-not-reply 电子邮件,以便他们知道他们的消息已被听到(只是不要忘记询问他们的电子邮件地址)


你是对的,但使用“联系页面”的唯一问题是用户无法将我的电子邮件地址添加到他们的联系人列表中;因此,每次他们想发送电子邮件都需要访问该网站。
我强烈建议不要使用联系页面。输入太小的表单字段很麻烦,也无法附加任何内容,而且我想希望在其已发送文件夹中发送邮件的人的百分比远高于不使用邮件程序的人的百分比.
@Socowi 怎么样?
@lmenus 由于用户必须在表单中输入她的电子邮件地址,因此网站所有者必须确保根据 GDPR 处理她的电子邮件地址。用户的电子邮件地址必须在发送到服务器之前进行加密(应该没问题。您的网站无论如何都应该使用 https)。必须告知用户她的电子邮件地址是如何使用的,它的存储时间等等。
@Eoin 不。如果您使用 mailto 链接,您的服务器不会看到他们的电子邮件,因此它不受 GDPR 的约束。
E
Eoin

JavaScript 解决方案的问题在于,关闭 JS 的人也将看不到电子邮件地址。尽管是少数人,但您需要多种技术组合才能获得最佳效果。

此处详细介绍了其中许多技术,但我仅提供了解决方案:https://www.ionos.co.uk/digitalguide/e-mail/e-mail-security/protecting-your-e-mail-address-how-to-do-it/

注释

<p>If you have any questions or suggestions, please write an e-mail to:
us<!-- abc@def -->er@domai<!-- @abc.com -->n.com. 
</p>

隐藏跨度

<style type="text/css">
span.spamprotection {display:none;}
</style>

<p>If you have any questions or suggestions, please write an e-mail to:
user<span class="spamprotection">CHARACTER SEQUENCE</span>@domain.com. 
</p>

反向字符串 这对于多语言网站可能不友好。

<style type="text/css">
span.ltrText {unicode-bidi: bidi-override; direction: rtl}
</style>
<p>If you have any questions or suggestions, please write an e-mail to:
<span class="ltrText"> moc.niamod@resu</span>.
</p>

JavaScript 与许多其他答案一样

<script type="text/javascript">
var part1 = "user";
var part2 = Math.pow(2,6);
var part3 = String.fromCharCode(part2);
var part4 = "domain.com"
var part5 = part1 + String.fromCharCode(part2) + part4;
document.write("If you have any questions or suggestions, please write an e-mail to:
   <href=" + "mai" + "lto" + ":" + part5 + ">" + part1 + part3 + part4 + "</a>.");
</script>

ROT13 加密 JavaScript 依赖,但也有助于 GDPR,因为它是加密的。

<script type="text/javascript">
function decode(a) {
  return a.replace(/[a-zA-Z]/g, function(c){
    return String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) 
                               ? c : c - 26);
  })
}; 
function openMailer(element) {
var y = decode("znvygb:orahgmre@qbznva.qr");
element.setAttribute("href", y);
element.setAttribute("onclick", "");
element.firstChild.nodeValue = "Open e-mail software";
};
</script>
<a id="email" href=" " onclick='openMailer(this);'>E-mail: please click</a>

仅限 CSS 从这里借用:Protect e-mail address with CSS only

<!doctype html>
<html>
<head>
    <title>Protect e-mail with only css</title>
    <style type="text/css">
        .e-mail:before {
            content: attr(data-website) "\0040" attr(data-user);
            unicode-bidi: bidi-override;
            direction: rtl;
        }
    </style>
</head>
<body>

<span class="e-mail" data-user="nohj" data-website="moc.liamg"></span>

</body>
</html>

我使用了您的 CSS Only 解决方案,谢谢。现在真的有人禁用 JS 吗?所有网站都大量使用它(我们可以说它是强制性的)
我同意,但有些人同意。我不会说纯 CSS 版本是最好或最安全的。老实说,我会使用组合。
@AlainIb 许多人禁用它的原因是因为跟踪,例如分析、Facebook、广告等。
我发现反向字符串的想法很有趣。但它对我不起作用,因为当您从页面复制时它会再次反转。
@OutstandingBill 我们并没有防止复制和粘贴,但我们正在防止机器人。这并不意味着您的观点无效,我真的不知道答案。我要说的是,与真正的安全性相反,真正混淆的这些类型的解决方案通常不是最安全的。我通常会使用 JavaScript 解决方案。
A
Aziz Saleh

解决方案1:

您可以使用许多公开可用的电子邮件地址编码器,例如(google 上的第一个结果):

http://www.wbwip.com/wbw/emailencoder.html

这会将电子邮件编码为它们的字符实体值,这将需要更多的逻辑表单抓取器来对其进行解码。

所以像:test@gmail.com 这样的电子邮件变成了 &#116;&#101;&#115;&#116;&#064;&#103;&#109;&#097;&#105;&#108;&#046;&#099;&#111;&#109;,它也可以在 mailto 中使用。

解决方案2:

使用在线电子邮件到图像转换器(再次在 google 上获得第一个结果):

http://www.email2image.com/Convert-Email-to-Image.aspx

使其成为图像。其他服务使您能够通过 API 自动执行此操作,例如:

https://www.mashape.com/seikan/img4me-text-to-image-service#!endpoint-Main


任何称职的机器人都能够破解编码的电子邮件。令人惊讶的是,并非所有人都这样做,但在一般情况下,这不是一个安全的选择。如果你还是选择它,选择一个不太受欢迎的变种可能会持续更长时间。
N
Nabil Kadimi

就个人而言,我想出了这个非常简单且有趣的解决方案。我把这段代码放在我希望我的电子邮件地址出现的地方:

<script>(function whatever(){var s='@',n='nabil',k='kadimi.com',e=n+s+k,l='<a href=mailto:{{spam@uce.gov}}>{{spam@uce.gov}}</a>'.replace(/{{.+?(}})/g,e);document.write(l)})()</script>

解释

爬取网站并使用正则表达式查找电子邮件的机器人将获取 FTC(联邦贸易委员会)电子邮件地址 (spam@uce.gov)。使用该代码构建后,合法访问者将看到您的电子邮件地址。

##扩展

<script>
    (function whatever() {
        var s = '@'
            , n = 'nabil'
            , k = 'kadimi.com'
            , e = n + s + k
            , l = '<a href=mailto:{{spam@uce.gov}}>{{spam@uce.gov}}</a>'.replace(/{{.+?(}})/g, e)
        ;
        document.write(l);
    })();
</script>

##演示