看起来我们将添加CAPTCHA支持。这是防止机器人、垃圾邮件发送者和其他恶意脚本活动所必需的。我们只希望人类在这里发布或编辑东西!
我们将使用 JavaScript (jQuery) CAPTCHA 作为第一道防线:
http://docs.jquery.com/Tutorials:Safer_Contact_Forms_Without_CAPTCHA
这种方法的优点是, 对于大多数人来说,验证码永远不会可见!
然而,对于禁用 JavaScript 的人,我们仍然需要一个后备,这就是它变得棘手的地方。
我为 ASP.NET 编写了一个传统的 CAPTCHA 控件,我们可以重复使用它。
但是,我更喜欢使用文本内容,以避免每次请求在服务器上创建所有这些图像的开销。
我见过像..
\/\/(_)\/\/
也许我只是在这里对风车倾斜,但<noscript>如果可能的话,我希望有一个资源密集型、非基于图像的兼容验证码。
<noscript>
想法?
我开发的一种方法似乎工作得很好(尽管我可能没有像你那样收到那么多评论垃圾邮件),是有一个隐藏字段并用虚假值填充它,例如:
<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,您的评论将被标记为垃圾邮件,但是,我会查看标记为垃圾邮件的评论,所以这不是问题。
对评论的回应
@MrAnalogy:服务器端方法听起来是个好主意,与在 JavaScript 中做的完全一样。好决定。
@AviD:我知道这种方法容易受到直接攻击,正如我在博客中提到的那样。但是,它将防御您的普通垃圾邮件机器人,后者盲目地将垃圾提交到它可以找到的任何形式。