看起来我们将为Stack Overflow添加CAPTCHA支持。这对于防止机器人、垃圾邮件发送者和其他恶意脚本活动是必要的。我们只希望人类在这里发布或编辑东西!

我们将使用JavaScript (jQuery)验证码作为第一道防线:

http://docs.jquery.com/Tutorials:Safer_Contact_Forms_Without_CAPTCHAs

这种方法的优点是,对于大多数人来说,CAPTCHA永远不会可见!

然而,对于禁用JavaScript的人,我们仍然需要一个备用方案,这就是棘手的地方。

我为ASP编写了一个传统的CAPTCHA控件。NET,我们可以重复使用。

但是,我更倾向于使用一些文本化的东西,以避免为每个请求在服务器上创建所有这些图像的开销。

我见过这样的事情…

ASCII文本验证码:\/\/(_)\/\/ 数学难题:7减3乘以2等于多少? 小问题:癞蛤蟆和冰棍,哪个更好吃?

也许我只是在风车这里倾斜,但我希望有一个更少的资源密集型,非图像为基础的<noscript>兼容的验证码,如果可能的话。

想法吗?


当前回答

映像可以在客户端从服务器传递的基于矢量的信息中创建。

这将减少服务器上的处理和传输的数据量。

其他回答

有史以来最好的验证码!也许你需要像这样的东西来注册,以防止庸人进入。

不是最精致的反垃圾邮件武器,但是微软支持:

Nobot-Control (AjaxControlToolkit的一部分)。

NoBot可以通过违反上述任何技术进行测试:快速回发、多次回发或禁用浏览器中的JavaScript。

演示:

http://www.asp.net/AJAX/AjaxControlToolkit/Samples/NoBot/NoBot.aspx

非常简单的算术很好。盲人也能回答。(但正如Jarod所说,要注意操作符优先级。)我想有人可以编写一个解析器,但这使得垃圾邮件的成本更高。

足够简单,并且围绕它编写代码并不困难。我看到了两个威胁:

随机的垃圾邮件机器人和可能支持它们的人类垃圾邮件机器人;而且 机器人创建游戏堆栈溢出

通过简单的算术,你可以打败威胁1,但不能打败威胁2。

使用简单的文本验证码,然后要求用户倒着输入答案,或者只输入第一个字母,或者最后一个字母,或者其他随机的东西。

另一个想法是制作一个ASCII图像,像这样(来自《传送门》游戏结束序列):

                             .,---.
                           ,/XM#MMMX;,
                         -%##########M%,
                        -@######%  $###@=
         .,--,         -H#######$   $###M:
      ,;$M###MMX;     .;##########$;HM###X=
    ,/@##########H=      ;################+
   -+#############M/,      %##############+
   %M###############=      /##############:
   H################      .M#############;.
   @###############M      ,@###########M:.
   X################,      -$=X#######@:
   /@##################%-     +######$-
   .;##################X     .X#####+,
    .;H################/     -X####+.
      ,;X##############,       .MM/
         ,:+$H@M#######M#$-    .$$=
              .,-=;+$@###X:    ;/=.
                     .,/X$;   .::,
                         .,    ..  

并给用户一些选项,如:IS A, LIE, BROKEN HEART, CAKE。

我最近(不记得在哪里了)看到了一个显示一堆图片的系统。每幅画都有一个指定的字符。然后,用户被要求为一些图片输入字符,这些图片展示了某些类别的例子(汽车、计算机、建筑物、鲜花等)。图片和字符以及类别每次都会改变,以构建CAPTCHA字符串。

唯一的问题是与这种方法相关的更高带宽,并且您需要大量分类的图片。没有必要浪费太多资源来生成图片。