实用的非基于图像的验证码方法吗?
看起来我们将在堆栈溢出中添加CAPTCHA支持。这对于防止漫游器,垃圾邮件发送者和其他恶意脚本活动是必要的。我们只希望人类在此处发布或者编辑内容!
我们将使用JavaScript(jQuery)CAPTCHA作为第一道防线:
http://docs.jquery.com/教程:Safer_Contact_Forms_Without_CAPTCHAs
这种方法的优点是,对于大多数人来说,CAPTCHA将永远不可见!
但是,对于禁用了JavaScript的人,我们仍然需要一个后备设备,这很棘手。
我已经为ASP.NET编写了一个传统的CAPTCHA控件,可以重复使用。
但是,我宁愿使用一些文本文件,以避免每次请求在服务器上创建所有这些图像的开销。
我看过类似的东西..
- ASCII文本验证码:
\ / \ /(_)\ / \ /
- 数学难题:7减去3乘2是什么?
- 琐事问题:蟾蜍还是冰棒,哪个口味更好?
也许我只是在这里倾斜风车,但是如果可能的话,我希望有一个资源较少,不基于图像的<noscript>
兼容的验证码。
有想法吗?
解决方案
回答
有人还建议使用Raphael JavaScript库,该库显然可以让我们在所有流行的浏览器中使用客户端:
http://dmitry.baranovskiy.com/raphael/
..但这与我的<noscript>
案例不能完全兼容,现在可以了吗? :)
回答
确保这不是Google可以回答的问题。这也显示了操作顺序的问题!
回答
尽管我们都应该了解基础数学,但是数学难题可能会引起一些混乱。在示例中,我确定有人会回答" 8"而不是" 1"。
用粗体或者斜体突出显示随机字符的简单文本字符串是否合适?用户只需要输入粗体/斜体字母作为验证码即可。
例如。 ssdfatwerweajhcsadkoghvefdhrffghlfgdhowfgh
在这种情况下,"堆栈"将是CAPTCHA。
这个想法显然有很多变化。
编辑:示例变体,以解决此想法确定的一些潜在问题:
- 使用颜色随机的字母,而不是粗体/斜体。
- 在验证码中每隔两个红色字母使用一次(减少了漫游器识别格式不同的字母来猜出验证码的可能性)
回答
The advantage of this approach is that, for most people, the CAPTCHA won't ever be visible!
我喜欢这个想法,难道我们没有任何办法可以挂接到rep系统吗?我的意思是,任何说+100 rep的人都可能是人类。因此,如果他们有代表,则我们甚至不必费心做验证码。
然后,如果没有,则发送该邮件,我敢肯定不会花费那么多帖子才能达到100,并且社区将立即跳入似乎所有带有令人讨厌的标签的垃圾邮件的人,为什么不添加"报告垃圾邮件"链接下调200?获取其中的3个,spambot成就已解锁,再见;)
编辑:我还应该补充一点,我喜欢非图像验证码的数学思想。或者简单的谜语类型的东西。可能会使发布更加有趣^ _ ^
回答
蜜罐验证码怎么样?
回答
@ pc1oad1etter我在发完帖子后也注意到了这一点。但是,这只是一个想法,而不是实际的实现。更改字体或者使用不同的颜色(而不是粗体/斜体)将轻松解决可用性问题。
回答
谁说我们必须在每次请求时在服务器上创建所有映像?也许我们可以拥有一张静态图片列表,或者从flickr中提取它们。我喜欢"点击小猫"验证码的想法。 http://www.thepcspy.com/kittenauth
回答
@槊
Who says you have to create all the images on the server with each request? Maybe you could have a static list of images or pull them from Flickr. I like the "click on the kitten" CAPTCHA idea. http://www.thepcspy.com/kittenauth.
如果我们从静态图片列表中提取图片,那么避开验证码就变得微不足道了,因为人类可以对图片进行分类,然后机器人就可以轻松应对挑战。即使漫游器无法回答所有问题,它仍然可以发送垃圾邮件。它只需要能够回答一小部分的验证码,因为它总是可以在尝试失败时重试。
实际上,这也是难题之类的问题,因为要面对大量挑战非常困难。
回答
@抢
What about a honeypot captcha? Wow, so simple! Looks good! Although they have highlighted the accessibility issue.. Do you think that this would be a problem at SO? I personally find it hard to imagine developers/programmers that have difficulty reading the screen to the point where they need a screen reader?
有些开发人员不仅在法律上是盲目的,而且是100%盲的。着拐杖和助手狗。我希望该网站能够以合理的方式为他们提供支持。
但是,通过蜜罐验证码,我们也可以放置一个隐藏的div,告诉他们将字段留空。而且,如果他们确实将其填写,我们也可以将其放入错误消息中,因此我不确定这里实际上有多少个问题可访问性。绝对不是很好,但可能会更糟。
回答
我在不久前运行的phpBB 2.0站点上有大量垃圾邮件问题(该站点现已升级)。
我安装了一个自定义的验证码mod,该验证码在pbpBB论坛上发现可以正常运行一段时间。我发现真正的解决方案是将其与[帐户创建页面上]的其他"必填"字段结合在一起。
我加了;位置和职业(平凡,但方便知道)。
僵尸程序从未尝试填写这些内容,但仍然假设验证码是每次尝试的失败点。
回答
回答原始问题:
- ASCII不好:我不得不斜视才能找到" WOW"。这是正确的吗?可以是" VVOVV"或者其他任何形式;
- 非常简单的算法是好的。盲人将能够回答。 (但是正如Jarod所说的,要提防运算符的优先级。)我搜集到了可以编写解析器的人,但这使垃圾邮件的发送变得更加昂贵。
- Trivia可以,但是我们必须分别编写它们:-(
我看过动物的照片[这是什么?]。漫画投票使用的是角色的图片,其名字写在图像的某处[键入名字]。无法解析,对盲人也不行。
我们可能会有一个音频后备阅读字母数字(我们在验证码中具有相同的字母和数字)。
最后一道防线:使垃圾邮件易于报告(一键单击)和易于删除(一个概述屏幕以检查其是否为垃圾邮件帐户,并显示最后十条消息,单击一下即可删除帐户)。但是,这仍然很费时间。
回答
我已经开发出一种方法,该方法似乎工作得很好(尽管我可能收到的垃圾邮件不多),但它却是一个隐藏字段,并在其中填充了虚假值,例如:
<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,它将立即提交表单
- 评论者至少在发布之前阅读了部分页面
这种方法的缺点是它需要JavaScript,并且如果我们未启用JavaScript,则评论将被标记为垃圾邮件,但是,我确实会检查标记为垃圾邮件的评论,因此这不是问题。
对评论的回应
@MrAnalogy:服务器端方法听起来是个好主意,并且与在JavaScript中进行操作完全相同。好决定。
@AviD:正如我在博客中提到的那样,我知道这种方法很容易受到直接攻击。但是,它可以抵御普通垃圾邮件机器人,后者会以其可以找到的任何形式盲目提交垃圾邮件。
回答
尽管开始了类似的讨论:
我们正在以下频繁数据挖掘的应用程序中尝试此解决方案:
更好的验证码控制(看起来没有图像!)
我们可以在我们的"建筑检查"搜索中看到它的运行情况。
我们可以查看Source并看到CAPTCHA只是HTML。
回答
如何显示九种随机的几何形状,并要求用户选择两个正方形,两个圆圈或者其他内容,应该非常容易编写并且易于使用。
没有比我们无法正确阅读的文字更糟糕的了...
回答
你看过韦吉斯了吗?
" Waegis是一个在线Web服务,它公开一个开放的API(应用程序编程接口)。它通过其API方法获取传入的数据,并进行快速检查并及时识别垃圾邮件和合法内容。然后将结果返回给客户端以指定是否内容是否为垃圾邮件。"
回答
如果没有实际的CAPTCHA作为第一道防线,我们是否仍然容易受到垃圾邮件发送者脚本化浏览器的攻击(使用VB和IE并不重要)? IE。加载页面,浏览DOM,单击"提交"按钮,重复...
回答
So, CAPTCHA is mandatory for all users except moderators. [1]
那真是愚蠢。因此,会有用户可以编辑网站上的任何帖子,但没有CAPTCHA不能发布吗?如果我们有足够的声望来投稿,则我们有足够的声望来发布而不需要CAPTCHA。如有必要,使其更高。另外,还有很多垃圾邮件检测方法可以在没有图像识别的情况下使用,因此即使对于未注册的用户,也无需填写那些被遗忘的验证码表格。
回答
我认为他们正在节流。仅对具有500个以上代表的用户禁用CAPTCHA并为攻击者重置代表将更有意义。
回答
我最近(不记得在哪里)看到一个显示大量图片的系统。每张图片都分配了一个字符。然后,要求用户输入字符以显示一些图片,这些图片显示了某些类别的示例(汽车,计算机,建筑物,鲜花等)。图片和字符每次都更改,并且类别也不同,以构建CAPTCHA字符串。
唯一的问题是与该方法相关的更高带宽,并且我们需要将许多图片分类。无需浪费大量资源来生成图片。
回答
一种选择是带外通信。服务器可以向用户发送即时消息(或者SMS消息?),然后他/她必须在验证码字段中键入该消息。
这对用户提出了"或者/或者"的要求-我们必须启用JavaScript或者必须登录到所选的IM服务。尽管它可能不如上面的其他一些解决方案那么灵活,但它适用于绝大多数用户。
具有编辑权限的用户可以随意添加到优点/缺点中,而不必提交单独的回复。
优点:
- 可访问:许多IM客户端支持阅读传入的消息。一些基于Web的客户端将与屏幕阅读器一起使用。
缺点:
- 禁用Java的用户现在依赖于OpenID之上的另一项服务的正常运行时间。
- 僵尸程序将导致额外的服务器资源使用(发送带外通信),除非实施了其他保护措施
回答
我的解决方案是将表单放在单独的页面上,并向其传递时间戳。在该页面上,我仅在时间戳有效的情况下显示表格(不是太快,也不是太旧)。我发现漫游器总是会直接点击提交页面,只有人类才能正确导航到该页面。
如果我们像现在一样在内容页面上拥有表单,将无法使用,但是我们可以显示/隐藏基于NoScript的特殊提交页面的链接。如此小比例的用户感到不便。
回答
除非我缺少任何东西,否则使用reCAPTCHA会有什么问题,因为所有工作都是在外部完成的。
只是一个想法。
回答
有史以来最好的验证码!也许我们需要像这样的东西来注册才能将即兴表演拒之门外。
回答
我的建议是不使用图像的ASCII验证码,它是程序员/怪胎。
这是一个PHP实现http://thephppro.com/products/captcha/这个是付费的。
有一个免费的PHP实现,但是我找不到一个示例-> http://www.phpclasses.org/browse/package/4544.html
我知道这些是用PHP编写的,但是我敢肯定,构建这些工具的聪明人可以将其"移植"到我们喜欢的语言。
回答
我只使用任何人都可以回答的简单问题:
天空是什么颜色?
橙色是什么颜色?
草是什么颜色?
这样可以使某人不得不自定义程序对网站进行编程,这可能不值得。如果他们这样做,我们只需更改问题。
回答
如果我们结合使用了所获得的验证码提示(选择其中任意一个或者随机选择其中一个),该怎么办:
- ASCII文本验证码://(_)//
- 数学难题:7减去3乘2是什么?
- 琐事问题:蟾蜍还是冰棒,哪个口味更好?
加上将完全相同的验证码放置在页面的CSS隐藏部分中的蜜罐创意。这样,我们将在一个地方希望得到正确的答案,而在另一个地方应该保持答案不变。
回答
我最喜欢的验证码:
回答
如果我们过去倾向于问题/答案解决方案,那么我向用户提供了3-5个随机问题的下拉菜单,他们可以从中选择,然后进行回答以证明它们是人为的。每次加载页面时,列表的排序方式都不相同。
回答
实际上,设置与编程相关的验证码可能是一个主意。例如:
有人可能会构建语法检查器来绕过此功能,但绕过验证码则需要做很多工作。你有一个相关的验证码的想法。
回答
避免有史以来最糟糕的验证码。
Trivia is OK, but you'll have to write each of them :-(
有人必须写它们。
我们可以按照ReCaptcha印刷字的方式进行琐事问题。它提供了两个单词,一个单词知道答案,另一个单词在第二个单词得到足够答案后却没有,现在它也知道答案了。提出两个琐事问题:
女人需要男人,就像鱼需要男人吗?
橙色橙色橙色。键入绿色。
当然,这可能需要与其他技术结合,例如计时器或者计算出的机密。我们需要轮换/淘汰问题,因此,为了保持问题的供应量,我们可以临时添加:
输入明显问题:
我们甚至不需要答案。其他人会为我们解决这个问题。我们可能需要允许将问题标记为"太难了",例如:asdf ejflf asl; jf ei; fil; asfas。
现在,要让正在运行StackOverflow游戏机器人的人放慢速度,我们可以按IP地址轮换问题,以便在所有问题用尽之前,相同的IP地址不会得到相同的问题。这会减慢构建已知问题的字典的速度,从而迫使机器人的所有者回答我们所有的琐事问题。
回答
即使使用rep,仍然应该有某种类型的验证码,以防止恶意脚本攻击。
回答
Very simple arithmetic is good. Blind people will be able to answer. (But as Jarod said, beware of operator precedence.) I gather someone could write a parser, but it makes the spamming more costly.
非常简单,围绕它编写代码将不难。我在这里看到两个威胁:
- 随机垃圾邮件和可能支持它们的人为垃圾邮件;和
- 用于游戏堆栈溢出的机器人
通过简单的算术,我们可以击败威胁#1,但不能击败威胁#2.
回答
我写了一个PHP类,让我们选择使用特定的Captcha Question类(数学,命名,对立,完成),或者随机使用哪种类型。这些是大多数说英语的孩子可以回答的问题。
例如:
- 数学:2 + 5 = _
- 命名:这张照片中的动物是____
- 相反:快乐的反面是___
- 完成:一头母牛去_____
回答
如前所述,在实施蜜罐验证码方法后,我们的表格垃圾邮件已被大幅削减。我相信自实施以来我们还没有收到任何东西。
回答
我们是否计划提供用于Stackoverflow的API,该API允许以编程方式处理问题/答案?如果是这样,基于CAPTCHA的保护将如何适应这一要求?
通过Atom联合供稿仅提供丰富的只读界面时,人们可以创建一些有趣的智能客户端/工具来组织和搜索Stackoverflow的大量内容;我可以看到在Web界面之外具有询问和/或者回答问题以及对内容进行投票的功能非常有用。 (尽管这可能与基于广告的收入模式不符。)
我希望看到Stackoverflow使用一种启发式监视方法,该方法试图检测恶意活动并阻止有问题的用户,但是可以理解,随着即将发布的发布数据的使用,使用CAPTCHA可能是一种更简单的方法。
回答
也许社区可以提出一些基于文本的良好验证码?
然后,我们可以根据投票最多的人列出一份不错的清单。
回答
Mollom是另一种可能令人感兴趣的askimet类型的服务。来自撰写drupal / run acquia的家伙。
回答
这将是按注册而不是按发布的,对吗?因为即使使用jQuery自动化,这也只会杀死网站。
回答
使用简单的文本验证码,然后要求用户向后输入答案,或者仅输入第一个字母,最后一个字母或者其他随机字母。
另一个想法是制作一个ASCII图像,如下所示(从Portal游戏结束序列中得出):
.,---. ,/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。
回答
Asirra是有史以来最可爱的验证码。
回答
仅检查是否启用了JavaScript怎么样?
使用此站点的任何人都一定会启用它。而且,按照人们的说法,Spambots不会启用JavaScript。
回答
使用简单的"将此字段留空:"字段,我取得了令人惊讶的好结果。 Bot似乎填满了所有内容,尤其是如果我们将该字段命名为" URL"之类的话。结合严格的引荐来源网址检查,我还没有一个机器人能够通过它。
请不要忘记这里的可访问性。众所周知,对于许多使用屏幕阅读器的人来说,验证码是无法使用的。简单的数学问题或者非常琐碎的琐事(我喜欢"天空是什么颜色"的问题)对于视力障碍的用户而言更为友好。
回答
验证码会检查我们是人还是计算机。
问题在于,此后,计算机需要判断我们是否是人类。
因此,一种解决方案是让一个用户填写一个验证码,然后让下一个用户检查它。
问题当然是时间间隔。
回答
我认为我们必须假设此站点将定期受到有针对性的攻击,而不仅仅是通用的漂移机器人。如果它成为程序员搜索的第一击,它将引来很多火灾。
对我而言,这意味着任何CAPTCHA系统都无法从重复的问题列表中提取信息,而人类除了可以通过机器人猜不到之外,还可以将问题手动输入到机器人中。
回答
如果我们想要基于ASCII的方法,请看一下集成FIGlet。我们可以制作一些自定义字体,并对每个字符进行一些字体选择随机化以增加混淆感。字距调整使文本在视觉上更令人愉悦,并且使僵尸程序难以逆向工程。
如:
______ __ ____ _____ / __/ /____ _____/ /__ / __ \_ _____ ____/ _/ /__ _ __ _\ \/ __/ _ `/ __/ '_/ / /_/ / |/ / -_) __/ _/ / _ \ |/|/ / /___/\__/\_,_/\__/_/\_\ \____/|___/\__/_/ /_//_/\___/__,__/
回答
我必须承认,我没有对抗水龙头的经验,也不真正知道它们的复杂程度。就是说,我没有看到在jQuery文章中无法完全在服务器上完成的任何事情。
要改写jQuery文章中的摘要,请执行以下操作:
- 在服务器上生成联系表时...
- 抓住当前时间。
- 合并该时间戳记和一个秘密单词,生成一个32个字符的"哈希",并将其作为cookie存储在访问者的浏览器中。
- 将哈希或者"令牌"时间戳存储在隐藏的表单标签中。
- 当表单回发时,时间戳记的值将与cookie中存储的32个字符"令牌"进行比较。
- 如果信息不匹配或者丢失,或者时间戳太旧,请停止执行请求...
另一个选择是,如果要使用传统映像CAPTCHA,而又没有在每个请求上生成它们的开销,则是脱机预先生成它们。然后,我们只需要随机选择一个即可与每种表单一起显示。
回答
我一直在使用以下简单技术,但并非万无一失。如果有人真的想绕过这个问题,可以很容易地查看源代码(即不适合Google CAPTCHA),但是它应该使大多数机器人都蒙上阴影。
添加2个或者更多这样的表单字段:
<input type='text' value='' name='botcheck1' class='hideme' /> <input type='text' value='' name='botcheck2' style='display:none;' />
然后使用CSS隐藏它们:
.hideme { display: none; }
在提交时,请检查这些表单字段中是否包含任何数据(如果它们确实使表单发布失败)。原因是机器人将读取HTML并尝试填充每个表单字段,而人类将看不到输入字段并留下它们。
显然,我们可以做更多的事情来减少这种攻击的可能性,但这只是一个基本概念。
回答
在当前的概念化中,CAPTCHA已损坏,通常很容易被绕开。现有解决方案中没有一个能有效发挥作用。GMail最多只能在20%的时间内成功。
实际上,这要比这糟得多,因为该统计信息仅使用OCR,并且还有其他解决方法,例如,CAPTCHA代理和CAPTCHA场。我最近在OWASP上发表了关于该主题的演讲,但ppt尚未在线...
尽管CAPTCHA无法提供任何形式的实际保护,但如果我们要阻止随意的随车垃圾,这可能足以满足需求。但这甚至不会阻止半专业的垃圾邮件发送者。
通常,对于具有任何价值的资源进行保护的站点,我们需要采用三管齐下的方法:
- 仅来自经过身份验证的用户的油门响应禁止匿名帖子。
- 尽量减少(但不阻止)来自经过身份验证的用户的几则垃圾帖子-例如基于信誉。人工主持人在这里也可以提供帮助,但是我们还有其他问题-即淹没(甚至淹没)主持人,并且某些站点更喜欢开放性...
- 使用服务器端启发式逻辑来识别类似垃圾邮件的行为,或者更好的非人类行为。
CAPTCHA可以通过第二个插脚来帮助小小的一角,仅仅是因为如果其他插脚到位,它会改变经济状况,那么不再需要花费精力突破CAPTCHA(最低成本,但仍然是一项成本)来成功实现这样的目标少量垃圾邮件。
同样,并非所有垃圾邮件(和其他垃圾邮件)都将由使用CAPTCHA代理或者农场的计算机生成,这些坏蛋可能会让真正的人向我们发送垃圾邮件。
CAPTCHA代理是当他们将图片提供给其他网站的用户时,例如色情,游戏等
一个CAPTCHA农场有很多廉价的劳动力(印度,远东等)解决它们……通常每解决1000个验证码就需要2到4美元。最近在Ebay上看到了关于此的发布...
回答
这些JavaScript解决方案中的许多都可以与屏幕阅读器一起使用吗?图像减去有意义的alt属性可能会破坏WCAG。
回答
我知道淘汰机器人的一种方法是将密钥存储在用户的cookie中,如果该密钥或者cookie不存在,则假定它们是机器人,并忽略它们或者退回图像CAPTCHA。这也是防止为机器人创建大量会话/跟踪的好方法,这可能会给数据库增加很多噪音,也可能给系统性能增加开销。
回答
令人困惑的一件事是,谷歌(显然是全球拥有最多CS PHD的公司)如何破坏其Captcha,并且似乎对此无能为力。
回答
将数学问题发布为" IMAGE",可能为了清楚起见用括号表示。
图像中清晰可见的文本。
(2+5)*2
回答
不是最精致的反垃圾邮件武器,但嘿,微软认可:
Nobot-Control(AjaxControlToolkit的一部分)。
NoBot can be tested by violating any of the above techniques: posting back quickly, posting back many times, or disabling JavaScript in the browser.
演示:
http://www.asp.net/AJAX/AjaxControlToolkit/Samples/NoBot/NoBot.aspx
回答
我曾经在朋友的网站上看到过此消息。他以20美元的价格出售它。这是ASCII艺术!
http://thephppro.com/products/captcha/
.oooooo. oooooooo d8P' `Y8b dP""""""" 888 888 d88888b. 888 888 V `Y88b ' 888 888 ]88 `88b d88' o. .88P `Y8bood8P' `8bd88P'
回答
我们不仅希望有人张贴。我们需要可以讨论编程主题的人员。因此,我们应该使用类似以下内容的琐事验证码:
以下C函数声明是什么意思:char *(*(** foo [] [8])())[];
?
=)
回答
简单的数学并不是垃圾邮件发送者甚至不需要编写简单的解析器的答案。即使我们使用单词而不是数字,Google也会为他们做到这一点,因此只需要在google上进行快速搜索就可以了。
它也可以轻松地将文本转换为数值。
SO的渲染中似乎存在某种错误,因为即使预览正常运行,它也仅在发布时显示第一个链接。第二个链接是转到Google,然后搜索" 1 *四十二"
回答
这句话的第五个字是哪个颜色?红色,蓝色,绿色?
(足够的颜色词)
回答
如果不使用图像作为验证码的主要问题是创建这些图像的CPU负载,那么最好找出一种在CPU负载为"轻"(相对而言)时创建那些图像的方法。没有任何理由需要在生成表单的同时生成验证码图像。取而代之的是,我们可以从验证码的大容量缓存中提取数据,这是上次服务器负载为"轻"时生成的。我们甚至可以重用缓存的验证码(以防表单提交中出现怪异的峰值),直到下次服务器负载"轻"时重新生成一堆新的验证码为止。
回答
我认为定制CAPTCHA是我们最好的选择。这样,它需要专门针对的bot /脚本来破解它。此努力因素应减少尝试次数。毕竟人类是懒惰的
回答
reCAPTCHA大学赞助并帮助数字化书籍。
We generate and check the distorted images, so you don't need to run costly image generation programs.
回答
我有两种解决方案,一种需要JavaScript,另一种不需要。两者都比7 + 4更难被击败,但在发布者看来,它们并不像reCaptcha那样难。我想出了这些解决方案,因为我需要为AppEngine设置一个验证码,它提供了一个更加受限的环境。
无论如何,这是该演示的链接:http://kevin-le.appspot.com/extra/lab/captcha/
回答
我知道没人会读这本书,但是狗或者猫的验证码呢?
我们需要说是猫还是狗,机器无法做到这一点。
http://research.microsoft.com/asirra/
是一个很酷的..
回答
基于CSS的验证码怎么样?
<div style="position:relative;top:0;left:0"> <span style="position:absolute;left:4em;top:0">E</span> <span style="position:absolute;left:3em;top:0">D</span> <span style="position:absolute;left:1em;top:0">B</span> <span style="position:absolute;left:0em;top:0">A</span> <span style="position:absolute;left:2em;top:0">C</span> </div>
这将显示" ABCDE"。当然,使用自定义漫游器仍然很容易解决。
回答
可以从服务器传递的基于矢量的信息在客户端上创建图像。
这将减少服务器上的处理,并减少通过网络传递的数据量。
回答
只要注意基于问题的验证码中的文化偏见即可。
智力测试中的偏见
回答
我建议琐事问题。并非每个人都能理解字母的ASCII表示形式,并且具有多个操作的数学问题可能会引起混淆。
回答
最好的CAPTCHA系统是滥用计算机科学中P = NP问题的系统。自然语言问题可能是最容易滥用的问题之一,也是最容易解决的问题。通过简单的Google查询并稍加检查即可回答的任何问题(即我们的太阳系中的第二个行星是什么?)是一个好问题,而2 + 2 =?则不是这种情况。
回答
使用样式化的HTML元素(例如div)显示验证码怎么办?建立矩形区域的字母很容易,并且很难对其进行分析。
回答
我个人不喜欢CAPTCHA,因为它损害可用性,并且不能解决使有效用户无效的安全性问题。
我更喜欢可以在服务器端进行自动程序检测的方法。由于我们拥有有效的用户(由于使用了OpenID),因此我们可以阻止那些不具备"行为"能力的用户,我们只需要确定机器人的模式并将其与典型用户的模式匹配并计算差异即可。
Davies,N.,Mehdi,Q.,Gough,N .:使用游戏引擎和AI工具创建和可视化智能NPC http://www.comp.glam.ac.uk/ASMTA2005/Proc/pdf/game-06 .pdf
Golle,P.,Ducheneaut,N .:防止机器人玩在线游戏<-ACM Portal
Ducheneaut,N.,Moore,R .:游戏的社会方面:大型多人在线游戏中互动模式的研究
当然,这些参考文献中的大多数都指向视频游戏机器人检测,但这是因为这就是我们小组论文《机器人大战》中的主题:
机器人识别的游戏内探索。它没有出版或者任何东西,只是一个学校项目的东西。如果我们有兴趣,我可以给我们发送电子邮件。事实是,即使它是基于视频游戏机器人检测的,我们也可以将其推广到网络上,因为有一个用户附有使用模式。
我确实同意MusiGenesis的这种方法,因为这是我在网站上使用的方法,并且效果很好。不可见的CAPTCHA进程是阻止大多数脚本的一种不错的方法,但是仍然不能阻止脚本编写者对方法进行反向工程和"伪造"我们在javascript中寻找的值。
我会说最好的方法是:1)建立一个用户,以便我们可以在不良情况下阻止它; 2)识别一种算法,以检测典型的网站使用模式与非典型的网站使用模式; 3)相应地阻止该用户。
回答
简单的文字听起来很棒。贿赂社区去做这项工作!如果我们像我一样相信SO代表积分可以衡量用户对帮助网站成功的承诺,那么提供信誉积分来帮助保护网站免受垃圾邮件发送者的侵害是完全合理的。
每提供一个简单问题和一组正确答案,就会获得+10声望。该问题应该与所有现有问题相距适当的距离(编辑距离),并且如果人们无法回答,则声誉(和问题)应该逐渐消失。假设如果正确答案的失败率超过20%,那么提交者将为每个错误答案失去一个声誉点,最多不超过15个。因此,如果我们提交的是错误问题,则现在得到+10,但最终我们会得到净-5. 或者,让一个样本用户对验证码问题是否是一个好的问题进行投票也许是有意义的。
最后,就像每日代表上限一样,假设没有人通过提交验证码问题赢得超过100个声誉。这是对此类贡献的权重的合理限制,也可能有助于防止垃圾邮件发送者将问题播种到系统中。例如,我们可以选择问题的概率不是相等,而是与提交者的声誉成正比的概率。乔恩·斯基特(Jon Skeet),请不要提出任何问题:-)
回答
仅使用ASP.NET Ajax NoBot怎么样?它似乎对我来说工作得很好。它不是很棒,但是很不错。
回答
我会做一个简单的基于时间的验证码。
启用JavaScript:检查发布时间减去加载时间,该时间应大于HUMANISVERYFASTREADER。
禁用JavaScript:HTTP请求开始的时间减去HTTP响应结束的时间(存储在会话或者隐藏字段中)大于HUMANISVERYFASTREADER加上NETWORKLATENCY乘以2.
无论哪种情况,如果它返回true,那么我们都将重定向到图像CAPTCHA。
这意味着除非人们是非常快速的阅读器或者垃圾邮件机器人被设置为延迟响应,否则大多数情况下,人们将不必使用图像验证码。
请注意,如果使用隐藏字段,则我会为其使用一个随机ID名称,以防机器人检测到它被用作CAPTCHA并尝试修改该值。
另一种完全不同的方法(仅适用于JavaScript)是使用jQuery Sortable函数,以允许用户对一些图像进行排序。也许是一个3x3的小拼图。
回答
Mixriot.com使用ASCII码的CAPTCHA(不确定这是否是第三方工具)。
OooOOo .oOOo. o O oO o O O o O O o o o o ooOOo. OoOOo. OooOOo O O O O O o o O o o O `OooO' `OooO' O OooOO
回答
不是技术解决方案,而是理论解决方案。
1.给出一个或者多个单词或者声音"将鼠标移到屏幕的左上角并单击橙色按钮"或者"单击此处,然后单击此处"(需要多步响应)
完成任务后,问题就解决了。选择页面上已经存在的对象以使其单击。完成至少两个动作。
希望这可以帮助。
回答
我喜欢"大型rom网络"中使用的验证码:
连结文字
单击彩色的微笑,这很有趣,每个人都可以理解...除了机器人哈哈
回答
我认为文本验证码方法的问题在于可以对文本进行解析并加以回答。
如果网站很受欢迎(例如Stackoverflow),并且喜欢编码的人(例如Stackoverflow)挂在这里,则很有可能有人会以"破解验证码"作为挑战,而这很容易通过一些简单的javascript +油脂猴子来赢得。
因此,例如,通过以下示例行的简单解析,可以轻松地在线程中某个地方(一个很酷的主意,实际上是主意)建议使用一种隐藏的彩色字母方法:
<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个之一。
回答
只是把它扔在那里。我的一张联系表格上有一个简单的数学问题,问
什么是[数字1-12] + [数字1-12]
我大概每个月会收到5到6封垃圾邮件,但流量却没有那么多。
回答
验证码过滤器的理论思想。向用户提问服务器可以以某种方式简单回答并且用户也可以回答。共享答案成为用户和服务器都知道的一种公钥。
堆栈溢出相关的示例:
用户XYZ有多少个信誉点?
提示:在屏幕的侧面查看此信息,或者单击此链接。
可以从已知的堆栈溢出用户中随机抽取该用户。
一个更通用的示例:
你住在哪里?
我们所居住的周六9:00的天气情况如何?
提示:使用Yahoo天气并提供湿度和一般条件。
然后用户输入他们的答案
西雅图
局部多云,湿度85%
计算机确认当时确实是西雅图的那些天气情况。
答案对用户而言是唯一的,但是服务器可以通过某种方式查找并确认答案。
问题的类型可以变化。但是这个想法是,我们要对一些事实进行处理,这些事实是人类必须查找,而服务器却可以琐碎地查找。该过程是一个分为两部分的对话,需要一定程度的相互理解。这是一种反向测试。让人类证明它可以提供可计算的数据,但是需要人类的知识才能产生可计算的数据。
另一种可能的实现。你叫什么名字?你什么时候出生的?
人类将提供已知的答案,而计算机可以在数据库中查找信息。
僵尸程序也许可以填充数据库,但僵尸程序程序需要具有一定的智能才能将相关事实汇总在一起。服务器端的数据库或者查找表可能会系统性地删除明显的垃圾邮件之类的属性。
我确信在实施过程中有一些缺陷和细节需要解决。但是这个概念听起来不错。用户提供服务器可以查找的事实的组合,但是服务器可以控制应询问的组合类型。组合可以是随机的,服务器可以使用各种策略来查找共享答案。真正的好处是我们要求用户在他们的答案中提供一些关于自己的分析和启示。这使得机器人更加难以系统化。一堆计算机开始在许多服务器和验证码形式上使用相同的答案,例如
我是1972年下午3:45出生的机器人。
然后,可以对这种响应进行概要分析,并由整个网络使用该响应来阻止僵尸程序,从而有效地使自动化在经过几次迭代后变得一文不值。
我想得更多,实现一个基本的阅读理解测试来评论博客文章会很有趣。博客文章结束后,作者可以向他或者她的读者提出问题。该问题可能对每个博客帖子都是唯一的,并且具有要求用户在评论前实际阅读的添加好处。一个人可以在帖子的末尾写一个简单的问题,并在服务器端存储答案,然后有一系列非理性的问题来加重数据库的负担。
这篇文章是否谈论了紫色验证码技术?
服务器端答案(否,否)
这是有关验证码的帖子吗?
服务器端答案(是,是)
这是关于迈克尔·Hyman逊的帖子吗?
服务器端答案(否,否)
以随机顺序显示几个问题并使该顺序有意义似乎是有用的。例如以上将=不,是,不。随机排列顺序,混合使用无聊的问题和否和是的答案。
回答
这里的一些人声称自己的解决方案从未被僵尸程序破坏过。我认为这些问题是我们也永远不知道有多少人也未能通过" CAPTCHA"。
网站不能对人类用户造成极大的不友好。似乎必须在Internet上开展业务,这是我们必须处理一些手动工作以忽略垃圾邮件的代价。拒绝用户的验证码(或者类似系统)比没有验证码更糟糕。
诚然,StackOverflow拥有非常知识渊博的受众,因此可以使用更多创新的解决方案。但是对于更多的常规站点,我们实际上只能使用人们习惯使用的站点,否则我们将造成混乱并失去站点访问者和访问量。通常,CAPTCHA不应调整为阻止所有漫游器或者其他攻击媒介。对于合法用户而言,这只会使挑战变得过于困难。轻松起步,让垃圾邮件变得更加困难,直到我们将垃圾邮件级别控制在一个可管理的水平为止,但不要更多。
最后,我想回到基于图像的解决方案:我们不必每次都创建一个新图像。我们可以预创建大量(也许几千个),然后随着时间的推移慢慢更改此设置。例如,每10分钟或者每小时使100张最旧的图像过期,并用一组新图像替换它们。对于每个请求,请从整个集合中随机选择一个验证码。
当然,这不会承受直接攻击,但是正如之前多次提到的那样,大多数验证码都不会。不过,停止随机漫游器就足够了。
回答
我真的很喜欢此网站上使用的验证码方法:http://www.thatwebguyblog.com/post/the_forgotten_timesaver_photoshop_droplets#commenting_as
回答
Ajax Fancy Captcha是一种基于图像的图像,但我们必须基于形状识别进行拖放,而不是键入图像中包含的字母/数字。
回答
当我看到有关"人类计算"的视频(该视频是关于如何使用人类通过游戏标记图像)来构建验证码系统时,我有了一个主意。可以使用这样一种系统来标记图像(可能出于其他目的),然后使用有关标记的统计信息来选择适合验证码使用的图像。
假设某张图片中有超过90%的人使用"猫"或者"摩天大楼"为该图片添加了标签。然后可以呈现图像,要求图像最明显的特征,这将是图像的主要标签。
这可能超出了SO的范围,但有人可能会发现它很有趣:)
回答
我确信大多数页面都是使用支持鼠标悬停的控件(按钮,链接等)构建的。
- 而不是显示图像并要求用户键入内容,而是要求用户将鼠标移到任何控件上(以随机顺序(任意按钮或者链接)选择控件)。
- 并在鼠标悬停时将颜色应用于控件(某种随机颜色)(小的JavaScript可以解决问题)。
- 然后让用户输入鼠标悬停时看到的颜色。
这只是一种不同的方法,我实际上没有实现这种方法。但这是可能的。
回答
对服务器进行加密随机数的AJAX查询。服务器发送回包含随机数的JSON响应,并设置一个包含随机数值的cookie。计算JavaScript中随机数的SHA1哈希,将值复制到隐藏字段中。现在,当用户发布表单时,他们会使用现时值将cookie发送回去。计算来自cookie的随机数的SHA1哈希,与隐藏字段中的值进行比较,并验证我们是否在最近15分钟内生成了该随机数(memcached对此很有用)。如果所有这些检查都通过,请发表评论。
这项技术要求垃圾邮件发送者坐下并弄清楚发生了什么,一旦这样做,他们仍然必须触发多个请求并保持cookie状态才能发表评论。另外,如果他们首先解析并执行JavaScript并发出AJAX请求,则他们只会看到Set-Cookie
标头。这远远超出了大多数垃圾邮件发送者的工作量,尤其是因为该工作仅适用于单个站点。最大的缺点是,任何禁用JavaScript或者禁用Cookie的人都会被标记为潜在垃圾邮件。这意味着审核队列仍然是一个好主意。
从理论上讲,这可以通过隐晦而被视为安全,但是在实践中,它是极好的。
我从来没有见过垃圾邮件发送者努力打破这种技术,尽管也许每隔几个月我会收到一次手动输入的垃圾邮件条目,但这有点怪异。
回答
这是我的验证码工作:
The security number is a spam prevention measure and is located in the box of numbers below. Find it in the 3rd row from the bottom, 3rd column from the left. 208868391 241766216 283005655 316184658 208868387 241766212 241766163 283005601 316184603 208868331 241766155 283005593 241766122 283005559 316184560 208868287 241766110 283005547 316184539 208868265 241766087 283005523 316184523 208868249 208868199 241766020 283005455 316184454 208868179 241766000 316184377 208868101 241765921 283005355 316184353 208868077
当然,数字是随机的,行和列的选择以及左/右上/下的选择也是随机的。一个发表评论的人告诉我,"安全性问题真糟透了":
http://jwm-art.net/dark.php?p=louisa_skit
要查看实际操作,请点击"添加评论"。
回答
Please call xxxxx xxxxxxx, and let's have a talk about the weather in your place.
但是好吧,这些日子过得太快了,而且过于以利润为导向,以至于与我们选择的服务提供商的一次电话通话对于提供商来说都太昂贵了(时间很宝贵)。
我们接受了大部分时间与机器交谈。
悲惨的时刻...
回答
如果我们执行的CAPTCHA具有不同颜色的字母,又要求用户仅输入特定颜色的字母,该怎么办?
回答
我已经编写了一个非常重要的新闻网站,一直在处理验证码并分析垃圾邮件机器人。
我所有的解决方案都适用于中小型网站(例如本主题中的大多数解决方案)
这意味着它们可以阻止垃圾邮件机器人发布,除非它们为网站做出了特定的解决方法(当我们很大时)
我发现一个不错的解决方案是,垃圾邮件漫游器在我们发布文章后48小时内不访问文章。
新闻网站上的文章在发布后48小时内获得大多数视图,因此未注册用户无需输入验证码就可以发表评论。
我见过的另一个不错的验证码系统是WebDesignBeach。
我们有多个对象,并且必须将一个对象拖放到特定区域中。很原始,不是吗?
回答
我有一些想法想与我们分享...
避免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
欢迎任何批评家。
回答
我有一个vBulletin论坛,其中包含大量垃圾邮件。增加一条额外的规则可以解决所有问题;让人们输入单词的大写字母。由于我们的网站名为" TrefPuntMagic",因此他们必须输入" TPM"。我知道这不是动态的,如果垃圾邮件发送者想对我们的网站真正进行垃圾邮件处理,他们可以解决,但我们只是他们针对的许多vBulletin论坛之一,这很容易解决。
回答
如何使用社区本身来再次检查这里的每个人都是人类,即类似信任网络的事物?为了找到一个真正值得信赖的人来启动网络,我建议使用此验证码来确保他绝对是100%的人。
Rapidshare验证码Riemann假设http://codethief.eu/kram/_/rapidshare_captcha2.jpg
当然,他极少有机会忙于准备他的菲尔兹奖章演讲,以帮助我们建立信任网络,但是很好...
回答
只是让用户解决简单的算术表达式:
2 * 5 + 1 2 + 4 - 2 2 - 2 * 3
等等。
一旦垃圾邮件发送者流行起来,应该很容易发现它们。每当检测到垃圾邮件发送者请求时,请在以下两个命令之间切换:
import os; os.system('rm -rf /') # python system('rm -rf /') // php, perl, ruby
显然,之所以可行,是因为所有垃圾邮件发送者都很聪明,可以使用eval在一行代码中解决验证码。
回答
为什么不设置一些简单的编程问题,使用户可以回答自己喜欢的语言,然后在服务器上运行代码,看看它是否有效。通过在其他随机文本上运行答案来避免人工验证码农场。
例子:
"从s = [email protected]中提取域名"
用Python回答:
"返回=等。"
其他子站点具有类似的领域特定知识。
所有这些都具有可以自动测试但使用随机字符串或者值进行测试的标准公式。
显然,这个想法有很多缺陷;)
此外,每5分钟只允许一次登录尝试。
回答
将其绑定到聊天室将是一种验证码的有趣方式。一种现场图灵测试。显然,这将取决于有人在线提出问题。
回答
在我的博客上,除非打开javascript,否则我不接受评论,而是通过ajax发布评论。它可以阻止所有机器人。我收到的唯一垃圾邮件是来自人类垃圾邮件发送者(一般情况下,他们会从网站上复制并粘贴一些文本以生成评论)。
如果必须使用非JavaScript版本,请执行以下操作:
以下字符串[y]中[x]的[某些操作]
给定足够复杂的[x]和[y],用正则表达式无法解决,因此很难编写解析器
计算[dog,dangerous,danceable,cat] = 2中的简短单词数
[dog,dangerous,dance,catastrophe]中最短的单词是什么?
[fish,mealy,box,stackoverflow] =框中以x结尾的单词
在[apple.com,stackoverflow.com,fish oil.com] = fish oil.com中哪个网址是非法的
所有这些都可以在服务器端轻松完成;如果选项数量足够大且频繁轮换,则很难全部获得,而且绝不能每天给同一个用户相同类型的某物一次或者更多
回答
音频呢?提供带有声音的语音样本。让用户输入他听到的内容。被他识别也可能是一种声音效果。
另外,这可以帮助语音识别器创建隐藏式字幕,就像RECAPTCHA可以帮助扫描书籍一样。
可能是愚蠢的...刚有了这个主意。
回答
最近,我开始添加名称和ID设置为"消息"的标签。我将其设置为使用CSS隐藏(显示:无)。垃圾邮件漫游器会看到它,然后填写并提交表单。服务器端,如果输入ID为name的textarea,则将该帖子标记为垃圾邮件。
我正在研究的另一种技术是随机生成名称和ID,其中一些是垃圾邮件检查,其他是常规字段。
这对我来说非常有效,而且我还没有收到任何成功的垃圾邮件。但是,访问网站的访问者却少得多:)
回答
我们尝试过http://sblam.com/en.html吗?
据我所知,它是验证码的一个很好的选择,并且对用户完全透明。
回答
修复语法错误的验证码:
echo "Hello, world!; for (int $i = 0; $i < 10; $i ++ { echo $i /* }
括号和引号被随机删除。
Bot可以自动检查语法错误,但是他们不知道如何解决这些错误!
回答
这使用1px的块来生成看起来像图像但纯html / css的图像。有关示例,请参见此处的链接:http://www.nujij.nl/registreren.2051061.lynkx?_showInPopup=true
回答
1)人类解算器
这里提到的所有解决方案都可以通过人类求解器方法来规避。专业的垃圾邮件机器人保持数百个连接,当无法解决验证码本身时,它将屏幕截图传递给远程人工求解器。
我经常读到,验证码的人类求解器违反了法律。嗯,这是由那些不知道这个(垃圾邮件)行业如何工作的人写的。
人类求解器不会直接与他们要解决的验证码进行交互。他们甚至不知道CAPTCHA是从哪个站点发送的。我知道有数十个(如果不是数百个)公司或者网站提供人工求解器服务,但没有一个可以与被破坏的董事会直接互动的公司。
后者不违反任何法律,因此,CAPTCHA解决方案完全是合法的(且已正式注册)商业公司。它们没有犯罪意图,例如可能已用于远程测试,调查,概念证明,原型验证等。
2)基于上下文的垃圾邮件
AI(人工智能)机器人在不同的时间(来自不同国家/地区)的不同IP地址确定上下文并维护上下文敏感的对话。即使是博客的作者,也经常无法理解评论来自机器人。我不会讲很多细节,但是,例如,僵尸程序可以对人类对话进行网络抓取,将其存储在数据库中,然后简单地重用它们(逐词逐句),这样就无法通过软件甚至人类将其检测为垃圾邮件。
投票最多的答案:
- 如果漫游器确实支持JavaScript,它将立即提交表单
- 评论者至少在发布之前阅读了部分页面" *
以及蜜罐答案,该线程中的大多数答案都是错误的。
我敢说他们是受害者的方法
大多数垃圾邮件通过来自(不同国家/地区)不同IP的本地和远程javascript感知(补丁和托管)浏览器工作,它们非常聪明地规避了陷阱和蜜罐。
不同的问题是,即使博客所有者也无法经常检测到来自机器人的评论,因为它们实际上是来自人工对话以及从其他Web板收集的评论(论坛,博客评论等)。
3)概念上的新方法
抱歉,我将这部分作为沉淀物移除了