Str*_*rae 29 php spam-prevention spam honeypot
通过"蜜罐",我的意思或多或少是这种做法:
#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.
?>
Run Code Online (Sandbox Code Playgroud)
更多信息在这里.
显然,真实字段是用随机哈希命名的,而蜜罐字段可以有不同的名称(电子邮件,用户,网站,主页等等),这是spambot通常填写的.
我喜欢这种技术,因为它不会导致用户被CAPTCHA烦恼.
你有没有人对这种技术有一些经验?有效吗?
小智 10
使用以下技术,我阻止了100%的垃圾邮件.
使用IP地址拒绝访问是非常有效的,因为机器人不断尝试使用相同的IP(如果他们更改IP,那么我将新的IP放在htaccess上就没问题了).我每天用crontab自动修剪.htaccess文件,这样文件就不会太大了.我调整要阻止的IP数量,因此具有相同IP的相同机器人将被阻止大约一周左右.我注意到机器人使用相同的IP进行了3天的攻击.
第一个#1技巧阻止大约99%,#2阻止大约1%,机器人不会通过这2个,所以#3可能没有必要.
自 2010 年左右以来,我已经以三种形式使用了蜜罐验证码,直到最近才进行修改,效果惊人。我们刚刚进行了一些我们认为会阻止大多数垃圾邮件机器人的更改,至少在它们变得更加复杂之前是这样。概括地说,这是我们设置它的方式:
每个表单上的一个输入字段是隐藏的(在 CSS 类属性中指定 display:none),默认值为 ""。对于屏幕阅读器等,隐藏的输入标签清楚地表明该字段必须留空。默认情况下根本没有长度,我们使用代码服务器端(在我们的例子中是 ColdFusion,但它可以是任何语言)来停止表单提交,如果该字段中有任何内容。当我们以这种方式中断提交时,我们会提供与成功相同的用户反馈(“感谢您的评论”或类似的内容),因此不会有失败的外部迹象。
但随着时间的推移,机器人变得聪明起来,我们最简单的表单被垃圾邮件攻击。带有前端验证的表单运行良好,我想这是因为它们也不只接受任何旧的文本输入,而是要求将电子邮件地址结构化为电子邮件地址,等等。一个被证明易受攻击的表单只有一个用于评论的文本输入和两个用于联系信息(电话号码和电子邮件)的可选输入;重要的是,我认为,这些输入都没有包括前端验证。
添加该验证很容易,我们很快就会这样做。不过,就目前而言,我们已经添加了其他人以“时间陷阱”的方式提出的建议。我们在页面加载时设置一个时间变量,并将该时间戳与提交表单的时间进行比较。目前我们允许在页面上 10 秒后提交,尽管有些人建议 3 秒。我们会根据需要进行调整。在添加前端验证之前,我想看看这对垃圾邮件流量有什么影响。
所以我的经验的快速总结是这样的:蜜罐工作得很好,就像它最初设想的那样。(我不记得我是从哪里找到它的,但这篇文章与我十多年前看到的第一篇非常相似。)通过添加由 HTML5 启用的客户端验证,它似乎更加有效。我们认为,如果我们现在对那些过于仓促的提交施加了服务器端限制,情况会更好。
最后,我会提到像 reCaptcha 这样的解决方案对我们来说是不可能的。我们花了大量时间使用 Google 的地图 API 开发 Web 应用程序,它运行良好,直到 Google 在没有警告和过渡建议的情况下更改了他们的 API。我们不会与同一个虐待他人的配偶结婚两次。
| 归档时间: |
|
| 查看次数: |
17396 次 |
| 最近记录: |