我开发的一种方法 看起来非常完美(尽管我可能没有像你一样遭受大量的评论垃圾邮件),它是在表单中添加一个隐藏域并将其填充为虚假值,例如:
<input type="hidden" name="antispam" value="lalalala" />
接着我有一段 JavaScript 代码,它每秒钟更新一次数值,显示页面已加载的秒数:
var antiSpam = function() {
if (document.getElementById("antiSpam")) {
a = document.getElementById("antiSpam");
if (isNaN(a.value) == true) {
a.value = 0;
} else {
a.value = parseInt(a.value) + 1;
}
}
setTimeout("antiSpam()", 1000);
}
antiSpam();
当表单被提交时,如果反垃圾邮件值仍为“lalalala”,则将其标记为垃圾邮件。如果反垃圾邮件值是整数,则检查它是否大于10(秒)。如果小于10,我会将其标记为垃圾邮件;如果等于或大于10,则允许其通过。
If AntiSpam = A Integer
If AntiSpam >= 10
Comment = Approved
Else
Comment = Spam
Else
Comment = Spam
理论上:
- 垃圾邮件机器人不支持JavaScript并且会提交它所看到的内容
- 如果机器人支持JavaScript,它将立即提交表单
- 发帖者至少在发布评论前已阅读了页面的某些部分
这种方法的缺点是需要JavaScript,如果您没有启用JavaScript,则您的评论将被标记为垃圾邮件,然而,我会审核被标记为垃圾邮件的评论,所以这不是一个问题。
回复评论:
@MrAnalogy: 服务器端方法听起来很不错,这正是使用JavaScript进行操作的方式。干得好。
@AviD: 我知道这种方法容易遭到直接攻击,就像我在我的博客中提到的那样。但是,它将保护免受大多数垃圾邮件机器人自动提交内容的干扰。