看起来我们将为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>兼容的验证码,如果可能的话。
想法吗?
在我的博客上,除非有javascript,否则我不接受评论,而是通过ajax发布评论。它把所有的机器人挡在外面。我收到的唯一垃圾邮件来自人类垃圾邮件发送者(他们通常从站点复制并粘贴一些文本来生成评论)。
如果你必须要有一个非javascript版本,可以这样做:
下面字符串[y]中[x]的[某些操作]
给定一个足够复杂的[x]和[y],无法用正则表达式求解,那么编写解析器就很难了
数一下[dog,dangerous,danceable,cat]中短单词的个数= 2
在[dog,dangerous,danceable,catastrophe] = dog中最短的单词是什么
哪个单词以x结尾,[fish,mealy,box,stackoverflow] = box
在[apple.com, stackoverflow.com, fish oil.com] = fish oil.com中,哪个url是非法的
所有这些都可以在服务器端轻松完成;如果选项的数量足够大,并且频繁轮换,那么就很难获得所有选项,再加上永远不要每天给同一用户相同类型的内容超过一次
我认为文本验证码方法的问题在于文本可以被解析并因此得到回答。
如果你的网站很受欢迎(如Stackoverflow),人们喜欢代码挂在它(如Stackoverflow),很有可能有人会把“打破验证码”作为一个挑战,很容易赢得一些简单的javascript + greasemonkey。
因此,例如,在线程的某个地方建议隐藏彩色字母的方法(确实是一个很酷的想法,想法),可以通过以下示例行简单解析轻松打破:
<div id = "captcha">
<span class = "red">s</span>
asdasda
<span class = "red">t</span>
asdff
<span class = "red">a</span>
jeffwerf
<span class = "red">c</span>
sdkk
<span class = "red">k</span>
</div>
同样,解析这个也很简单:
3 + 4 = ?
如果它遵循模式(x + y)或类似的。
类似地,如果你有一组问题(橙色是什么颜色?比如,白雪公主周围有多少个小矮人?),除非你有成千上万个小矮人,否则你可以从其中挑选30个,生成一个问答散列,然后让脚本机器人重新加载页面,直到找到这30个小矮人中的一个。
我有一些想法想和你们分享……
避免OCR的第一个想法
一个验证码对用户来说有一些隐藏的部分,但完整的图像是两个代码在一起,所以OCR程序和验证码农场读取图像,包括可见部分和隐藏部分,尝试解码它们,但未能提交…-我已经准备好解决这个问题,并在网上工作。
http://www.planethost.gr/IdeaWithHiddenPart.gif
第二个想法,让它更容易
一页有很多单词,人类必须选择正确的一个。我也创建了这个,很简单。文字是可点击的图像,用户必须点击正确的图像。
http://www.planethost.gr/ManyWords.gif
没有图像的第三个想法
和以前一样,但是有div和文本或小图标。用户必须只点击正确的一个div/字母/图像,无论如何。
http://www.planethost.gr/ArrayFromDivs.gif
最终想法——我称之为CicleCaptcha
还有一个我的CicleCaptcha,用户必须在图像上找到一个点。如果他找到并点击它,那么是一个人,机器可能会失败,或者需要制作新的软件来找到解决这个问题的方法。
http://www.planethost.gr/CicleCaptcha.gif
欢迎任何批评。