看起来我们将为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>兼容的验证码,如果可能的话。
想法吗?
我一直在用下面这个简单的技巧,但也不是万无一失。如果有人真的想绕过这个,很容易查看源代码(即不适合谷歌验证码),但它应该愚弄大多数机器人。
像这样添加2个或更多的表单字段:
<input type='text' value='' name='botcheck1' class='hideme' />
<input type='text' value='' name='botcheck2' style='display:none;' />
然后使用CSS隐藏它们:
.hideme {
display: none;
}
在提交时检查这些表单字段中是否有任何数据,如果它们确实未能提交表单。理由是,机器人将读取HTML并尝试填充每个表单字段,而人类不会看到输入字段,并让它们单独存在。
显然,你可以做更多的事情来减少这种利用,但这只是一个基本概念。
使用简单的文本验证码,然后要求用户倒着输入答案,或者只输入第一个字母,或者最后一个字母,或者其他随机的东西。
另一个想法是制作一个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。