蜜罐技术对垃圾邮件的效果如何?

Posted

技术标签:

【中文标题】蜜罐技术对垃圾邮件的效果如何?【英文标题】:How effective is the honeypot technique against spam? 【发布时间】:2011-04-07 01:13:36 【问题描述】:

我所说的“蜜罐”或多或少是指这种做法:

#Register form
<style>
    .hideme
        display:none;
        visibility: hidden;
    
</style>
<form action="register.php">
    Your email: <input type="text" name="u-email" />
    Choose a password: <input type="text" name="passwd" />
    <div class="hideme">
        Please, leave this field blank: <input type="text" name="email" />  #the comment is for text-browser users
    </div>
    <input type="submit" value="Register" autocomplete=off />
</form>

//register.php
<?php
if($_POST['email'] != '')
    die("You spammer!");

//otherwise, do the form validation and go on.
?>

更多信息here。

显然,真正的字段是用随机哈希命名的,而蜜罐字段可以有垃圾邮件机器人通常填写的不同名称(电子邮件、用户、网站、主页等)。

我喜欢这种技术,因为它不会让用户对 CAPTCHA 感到厌烦。

你们中有人对这种技术有一些经验吗?有效吗?

【问题讨论】:

在做这样的事情时要小心你的字段名。那里有多个自动填表工具,一些用来引诱垃圾邮件机器人的东西也可能引诱填表工具。你试试我给的表格,你会称我为垃圾邮件发送者——我不知道我的系统填写了隐藏的“电子邮件”字段。 你说得对,我忘了蜜域的AUTOCOMPLETE=OFF属性;但并非所有浏览器都支持 Related : ***.com/questions/1577918/… 列出了很多 bot/validation 技术,如 CAPTCHA、honey pot、askimet 等。如果您在使用垃圾邮件机器人时遇到问题,绝对值得一读。 相关:Better Honeypot Implementation (Form Anti-Spam) 【参考方案1】:

老问题,但我想我会插话,因为我一直在为 Drupal (Honeypot) 维护一个模块,该模块使用蜜罐垃圾邮件预防方法和基于时间的保护(用户无法提交在 X 秒内完成表单,并且 X 会随着每次连续提交失败而呈指数增长)。使用这两种方法,我听说很多很多网站 (examples) 已经消除了几乎所有的自动垃圾邮件。

我使用 Honeypot + timestamp 比使用任何基于 CAPTCHA 的解决方案更成功,因为我不仅阻止了大多数垃圾邮件发送者,而且还不是 punishing my users。

【讨论】:

【参考方案2】:

通过以下技术,我可以阻止 100% 的垃圾邮件。

    带显示的蜜罐:无。 如果失败,则运行额外的脚本来收集 IP 地址并将其写入 .htaccess 文件中的拒绝行。 评论字段中的 URL 计数。 如果失败,只发出警告,因为这可能是人为的。 测量发布时间。 如果少于 5 秒,则显示错误消息并让他们重试,因为人类可以使用自动填充插件快速编写。 每天使用 crontab 修剪 htaccess 文件,因此拒绝行不会超过 30 行(相应调整)。

拒绝使用 IP 地址的访问非常有效,因为机器人不断尝试使用相同的 IP 潜入(如果他们更改 IP,那么我将新 IP 放在 htaccess 上,所以没问题)。我每天使用 crontab 自动修剪 .htaccess 文件,这样文件就不会太大。我调整了 IP 的数量来阻止,因此具有相同 IP 的同一机器人将被阻止大约一周左右。我注意到同一 IP 被 bot 使用了 3 天多次攻击。

第一个#1 技巧阻止了大约 99%,#2 阻止了大约 1%,并且机器人不会通过这 2 个,所以#3 可能没有必要。

【讨论】:

上述例程似乎实际上增加了机器人试验。我猜机器人会发疯,因为它们完全被拒绝访问服务器。我认为他们正在尝试解决如何填写表格,但他们的访问从第二次访问时被拒绝,因此他们无法判断出了什么问题。我希望他们会受到鼓励,并在时间流逝时停止尝试。 "honeypot with display:none. if failed..." 这是什么意思,如果 display: none 失败。你的意思是如果机器人仍然提交?那么你怎么知道它是一个机器人并以编程方式将它添加到 .htaccess 中呢?我要么很困惑,要么这是手工工作。 @Goose 如果机器人填写了隐藏的蜜罐字段,请将其添加到 IP 阻止列表中。 (我强烈建议将此与autocomplete="off" 配对,这样表单自动填充插件的合法用户就不会面临被阻止的风险。)【参考方案3】:

自 2010 年左右以来,我在三种表单上使用了蜜罐验证码,直到最近才进行任何修改,效果惊人。我们刚刚进行了一些我们认为可以阻止大多数垃圾邮件机器人的更改,至少在它们变得更加复杂之前是这样。概括地说,这是我们设置它的方式:

每个表单上的一个输入字段被隐藏(在 CSS 类属性中指定 display:none),默认值为“”。对于屏幕阅读器等,隐藏的输入标签清楚地表明该字段必须留空。默认情况下根本没有长度,如果该字段中有任何内容,我们使用代码服务器端(在我们的例子中是 ColdFusion,但它可以是任何语言)来停止表单提交。当我们以这种方式中断提交时,我们会向用户提供与提交成功相同的反馈(“感谢您的评论”或类似的内容),因此没有外在的失败迹象。

但随着时间的推移,机器人变得越来越聪明,我们最简单的表单也越来越受到垃圾邮件的攻击。带有前端验证的表单运行良好,我想这是因为它们也不接受任何旧文本输入,而是要求电子邮件地址的结构类似于电子邮件地址,等等。一种被证明易受攻击的表单只有一个用于 cmets 的文本输入和两个用于联系信息(电话号码和电子邮件)的可选输入;重要的是,我认为这些输入都不包括前端验证。

添加该验证很容易,我们很快就会这样做。不过,就目前而言,我们已经添加了其他人以“时间陷阱”的方式提出的建议。我们在页面加载时设置一个时间变量,并将该时间戳与提交表单的时间进行比较。目前我们允许在页面上 10 秒后提交,尽管有些人建议 3 秒。我们会根据需要进行调整。在添加前端验证之前,我想看看这对垃圾邮件流量有什么影响。

所以我的经验的快速总结是这样的:蜜罐工作得很好,就像它最初设想的那样。 (我不记得我最初是在哪里找到它的,但this post 与十多年前我第一次看到它非常相似。)添加client-side validation enabled by html5 似乎更有效。我们认为,我们现在对那些过于仓促的提交施加的服务器端限制会更好。

最后,我会提到像 reCaptcha 这样的解决方案不适合我们。我们花费了大量时间使用 Google 的地图 API 开发 Web 应用程序,它运行良好,直到 Google 在没有警告和过渡建议的情况下更改了他们的 API。我们不会和同一个施虐的配偶结婚两次。

【讨论】:

【参考方案4】:

但是,如果机器人创建者迎合您的页面,他们会看到(或者甚至有一个例行设置要检查)并且很可能会相应地修改他们的机器人。

我的偏好是使用reCaptcha。但以上将阻止一些机器人。

【讨论】:

我的网站上仍有许多机器人通过 reCaptcha :\ 您还可以考虑在您的网站上实施akismet.com。但这通常用于评论垃圾邮件。请记住,reCaptcha 和 Honey Pot 不会阻止人类垃圾邮件发送者。 akismet 很好,但如果可能的话,我会喜欢一种不依赖第三方服务的方式

以上是关于蜜罐技术对垃圾邮件的效果如何?的主要内容,如果未能解决你的问题,请参考以下文章

更好的蜜罐实现(表单反垃圾邮件)

R语言:朴素贝叶斯算法实现对中文垃圾邮件的分类

Rich gateway的邮件指纹算法是如何拦截垃圾邮件的?

实例讲解:基于贝叶斯分类的垃圾邮件识别

Django评论垃圾邮件

如何降低电子邮件的垃圾邮件分数?