我在这里寻找灵感。我需要对我的网站采用某种人工验证,但是现在最常见的方法(要求用户输入他们在图像中看到的字母和数字到文本输入框中)似乎有点垃圾 - I发现很难有时会弄清楚字母和字母是什么数字是。
一定有更好的方法!
我有一些想法,最好的一个似乎是向用户展示一系列图像(4-6),并要求他们根据图像的内容回答问题,例如:
(显示一些几何形状)“哪个图像有3个边?”
或
(显示动物的图片)“哪种动物可以飞?”
这样做的好处是易于编程,并且希望很容易通过。
有人能想到解决这个问题的其他方法吗?或者可能在上面列出的系统中发现缺陷?是否有可能使这种系统更容易让人类通过,并且机器人更难通过?
答案 0 :(得分:2)
虽然它有点陈旧,但我确实发现KittenAuth是一种有趣(可能非常有效)的验证码方法。但是,似乎只有一个demo on their contact page。
基于纯图像的方法(与文本图像相对)的问题在于,您基本上是在阻止盲人用户使用您的网站。 KittenAuth作者在其网站上的一条评论中承认了这一点。
作为KittenAuth的一个有趣的小骑手,this page有“有史以来最糟糕的10个,”包括我最喜欢的一个:
答案 1 :(得分:1)
尝试使用问题挑战系统,其中一个简单的问题需要简单的认知反应。例如,要求用户回答以下示例问题:
街上的三辆车可以看到另外三辆车。那里有多少辆汽车?
技术不是那么先进,以至于带宽敏感的机器人能够回答这样的问题但问题很容易回答。用户必须输入三或三才能验证他们是人,而不是机器。你需要有足够多的问题,机器人不会简单地ping你的网站查看要记录的问题,以便它可以随时回答。
答案 2 :(得分:1)
我特别喜欢“哪种动物可以飞”的例子。简单&有效的。
但是这种事情可能会被滥用。给它一个文化偏见 - 或一个被认为的偏见也不难。
并且,正如austin cheney所示,它很容易成为一种智力测试,并且您会遇到辅助功能问题。
答案 3 :(得分:1)
尝试使用基于ajax的提交过程,该过程通过单击普通按钮(而不是提交按钮)触发,使用jQuery非常简单。
据我所知,spambots没有javascript。
如果您担心没有启用JavaScript的用户,我认为让他们无法提交表单是完全可以的。如果他们不相信您在您的网站上启用javascript,那么他们无法在最大程度上使用该网站并不是您的错。
编辑:
另见:Practical non-image based CAPTCHA approaches?
问题是,如果某人故意瞄准您的网站,这种技术将无效。
EDIT2:
我无法提供实际示例的链接,但我blogged关于它的更多细节,所以这里有一些示例代码:
function submit_form()
{
jQuery.ajax({
"type": "POST", // or GET
"url": 'action_url', // The url you wish to send the data to, the url you'd put in the "action" attribute on the form tag
"data": jQuery("form#the-form").serialize(), // The data you'll send. You need to get the form somehow. Easiest way is to give it an id.
"dataType": "json", // Only put this if the server sends the response in json format
"success": function(data, textStatus) // server responded with http status 200
{
// This is the happy case: server response has arrived
},
"error": function(req, textStatus, errorThrown) // maybe HTTP 404 or HTTP 500
{
// something went wrong, the response didn't go through or the response didn't come. Handle the situation: let the user know, or something.
},
"complete": function(req, textStatus) // This one always gets called anyway
{
// cleanup after yourself
} // XXX careful: if you put a comma here, IE6 will fail
});
}