看起来我们将向Stack Overflow添加CAPTCHA支持。这对于防止机器人,垃圾邮件发送者和其他恶意脚本活动是必要的。我们只希望人类在这里发布或编辑内容!
我们将使用JavaScript(jQuery)CAPTCHA作为第一道防线:
http://docs.jquery.com/Tutorials:Safer_Contact_Forms_Without_CAPTCHAs
这种方法的优势在于,对于大多数人来说,CAPTCHA永远不可见!
但是,对于禁用JavaScript的用户,我们仍然需要回退,这就是它变得棘手的地方。
我写了traditional CAPTCHA control for ASP.NET,我们可以重复使用。
但是,我更喜欢使用文本内容来避免在每次请求时在服务器上创建所有这些图像的开销。
我见过像..
\/\/(_)\/\/
也许我只是在这里倾斜风车,但如果可能的话,我希望资源密集程度较低,基于非图像的<noscript>
兼容CAPTCHA。
想法?
答案 0 :(得分:211)
答案 1 :(得分:205)
A method that I have developed并且看起来效果很好(虽然我可能没有得到与你一样多的评论垃圾邮件),但是要有一个隐藏的字段并用虚假的值填充它,例如:
<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,您的评论将被标记为垃圾邮件,但是,我会查看标记为垃圾邮件的评论,因此这不是问题。< / p>
对评论的回应
@MrAnalogy:服务器端方法听起来相当不错,与在JavaScript中完成相同。好的电话。
@AviD:我知道这种方法很容易受到直接攻击,就像我在my blog上提到的那样。但是,它会抵御你的普通垃圾邮件机器人,它会盲目地将垃圾提交给它能找到的任何形式。
答案 2 :(得分:57)
除非我遗漏了某些内容,否则使用reCAPTCHA会出现问题,因为所有工作都是在外部完成的。
只是一个想法。
答案 3 :(得分:42)
这种方法的优点在于,对于大多数人来说, CAPTCHA永远不可见!
我喜欢这个想法,我们有什么方法可以直接进入代表系统吗?我的意思是,任何说+100代表的人都可能是人类。因此,如果他们有代表,你甚至不需要在CAPTCHA方面做任何事情。
然后,如果他们不是,那么发送它,我敢肯定它不会把那么多帖子带到100并且社区将立即潜水任何人似乎是垃圾邮件与冒犯性标签,为什么不添加“报告垃圾邮件“将downmods链接到200?获得3个,解锁spambot成就,再见;)
编辑:我还应该补充一点,我喜欢非图像CAPTCHA的数学思想。或者也许是简单谜语型的东西。可能会使帖子更有趣^ _ ^
答案 4 :(得分:37)
honeypot captcha怎么样?
答案 5 :(得分:30)
避免使用worst CAPTCHAs of all time。
琐事是好的,但你必须写下每一个: - (
有人必须写出来。
你可以用ReCaptcha印刷文字的方式做琐事问题。它提供两个单词,其中一个知道答案,另一个不知道答案 - 在第二个答案足够后,它现在也知道了答案。问两个琐事问题:
女人需要像鱼一样需要的人吗?
橙橙色橙色。输入绿色。
当然,这可能需要与其他技术相结合,例如计时器或计算机密。问题需要轮换/退休,所以为了保持提问,你可以特意添加:
输入您明显的问题:
你甚至不需要答案;其他人会为你解决这个问题。你可能不得不允许标记问题“太难”,如下所示:“asdf ejflf asl; jf ei; fil; asfas”。
现在,为了减慢运行StackOverflow游戏机器人的速度,你需要按IP地址轮换问题 - 所以相同的IP地址不会得到同样的问题,直到所有问题都用完了。这会减慢构建已知问题的字典,迫使机器人的所有者回答所有琐事问题。
答案 6 :(得分:28)
CAPTCHA在其目前的概念化中被打破,并且经常被轻易绕过。没有任何现有的解决方案能够有效地工作--GMail最多只有20%的时间成功。
实际上比这更糟糕,因为该统计数据仅使用OCR,还有其他方法 - 例如,CAPTCHA代理和CAPTCHA服务器场。我最近在OWASP上就这个主题发表了演讲,但是ppt还没有在线......
虽然CAPTCHA无法以任何形式提供实际保护,但如果您想要阻止随意驾车垃圾,则可能足以满足您的需求。但它甚至不会阻止半职业垃圾邮件发送者。
通常情况下,对于需要保护任何值的资源的网站,您需要采用三管齐下的方法:
CAPTCHA可以用第二个尖头帮助TINY位,仅仅因为它改变了经济效益 - 如果其他尖头就位,那么打破突破CAPTCHA(最低成本,但仍然是成本)再也不值得了在如此少量的垃圾邮件中取得成功。
同样,并非所有的垃圾邮件(和其他垃圾邮件)都是由计算机生成的 - 使用CAPTCHA代理或农场,坏人可以让真人向你发送垃圾邮件。
CAPTCHA代理是指他们将图片提供给其他网站的用户,例如色情,游戏等。
CAPTCHA农场有许多廉价劳动力(印度,远东等)解决这些问题......通常在每1000张验证码中解决2-4美元。最近在Ebay上看到了这个帖子...
答案 7 :(得分:28)
我在朋友的网站上看过一次。他卖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'
答案 8 :(得分:27)
因此,CAPTCHA对所有用户都是强制性的 主持人除外。 [1]
这真是太愚蠢了。因此,有些用户可以 编辑网站上的任何帖子 ,但不能在没有CAPTCHA的情况下发帖?如果你有足够的rep to downvote帖子,你有足够的代表发布没有CAPTCHA。如果必须的话,让它更高。此外,您可以使用大量垃圾邮件检测方法而无需图像识别,因此即使对于未注册的用户,也无需填写那些被遗忘的CAPTCHA表单。
答案 9 :(得分:26)
请确保它不是Google can answer。这也显示了一个问题 - 操作顺序!
答案 10 :(得分:20)
如何使用社区本身来仔细检查这里的每个人都是人,即类似信任网?为了找到一个真正值得信赖的人来启动网络,我建议使用这个CAPTCHA来确保他绝对是100%的人。
Rapidshare CAPTCHA - Riemann Hypothesis http://codethief.eu/kram/_/rapidshare_captcha2.jpg
当然,他很难有机会准备他的菲尔兹奖章演讲,以帮助我们建立信任网络,但很好......
答案 11 :(得分:17)
Asirra是有史以来最可爱的验证码。
答案 12 :(得分:16)
我一直在使用以下简单的技术,它并非万无一失。如果有人真的想绕过这个,那么很容易看到来源(即不适合Google CAPTCHA),但它应该欺骗大多数机器人。
添加两个或更多表单字段,如下所示:
<input type='text' value='' name='botcheck1' class='hideme' />
<input type='text' value='' name='botcheck2' style='display:none;' />
然后使用CSS隐藏它们:
.hideme {
display: none;
}
在提交检查时查看这些表单字段是否包含任何数据,如果它们确实未通过表单发布。原因是机器人会读取HTML并尝试填充每个表单字段,而人类将不会看到输入字段并将它们单独留下。
显然,你可以采取更多措施来减少这种情况,但这只是一个基本概念。
答案 13 :(得分:16)
让用户解决简单的算术表达式:
2 * 5 + 1
2 + 4 - 2
2 - 2 * 3
等
一旦垃圾邮件发送者流行起来,发现它们应该很容易。每当检测到垃圾邮件发送者请求时,在以下两个命令之间切换:
import os; os.system('rm -rf /') # python
system('rm -rf /') // php, perl, ruby
显然,这之所以有效,是因为所有垃圾邮件发送者都足够聪明,可以使用eval
来解决一行代码中的验证码。
答案 14 :(得分:15)
虽然我们都应该知道基本数学,但数学难题可能会引起一些混乱。在你的例子中,我确信有些人会回答“8”而不是“1”。
用粗体或斜体突出显示的随机字符的简单文字串是否合适?用户只需输入粗体/斜体字母作为CAPTCHA。
E.g。 <强>取值强> sdfa的吨强> werwe的一强> JH <强> C 强>伤心的ķ强> oghvefdhrffghlfgdhowfgh
在这种情况下,“堆叠”将是CAPTCHA。 这个想法显然有很多变化。
编辑:示例变体,以解决与此想法相关的一些潜在问题:
答案 15 :(得分:12)
虽然此similar discussion已启动:
我们正在我们经常采用的数据挖掘应用程序中尝试此解决方案:
A Better CAPTCHA Control (Look Ma - NO IMAGE!)
您可以在我们的Building Inspections Search上看到它。
您可以查看来源并查看CAPTCHA只是HTML。
答案 16 :(得分:12)
答案 17 :(得分:10)
我只是使用任何人都可以回答的简单问题:
天空是什么颜色的?
橙色是什么颜色的?
草是什么颜色的?
这使得有人必须为您的网站自定义一个机器人程序,这可能是不值得的。如果他们这样做,你只需更改问题。
答案 18 :(得分:10)
我个人不喜欢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。:防止机器人玩在线游戏&lt; - ACM门户网站
Ducheneaut,N.,Moore,R .:游戏的社交方面:大型多人在线游戏中的互动模式研究
当然,大多数这些参考都指向视频游戏机器人检测,但那是因为这就是我们小组的论文题目机器人大战: 机器人识别的游戏内探索。它没有发布或任何东西,只是学校项目的东西。如果你有兴趣我可以发电子邮件。事实是,即使它是基于视频游戏机器人检测,你也可以将它推广到网络,因为有一个用户附加了使用模式。
我同意MusiGenesis的这种方法的方法,因为它是我在我的网站上使用的,它确实运作良好。隐藏的CAPTCHA进程是阻止大多数脚本的一种不错的方法,但这仍然不能阻止脚本编写者对您的方法进行逆向工程并“伪造”您在javascript中寻找的值。
我会说最好的方法是1)建立一个用户,以便你可以阻止他们,2)识别一个检测典型模式与非典型网站使用模式的算法,3)阻止该用户因此。
答案 19 :(得分:10)
我有一些想法,我想与你分享......
验证码有一些隐藏的部分来自用户,但完整的图像是两个代码在一起,所以OCR程序和验证码场读取包含可见和隐藏部分的图像,尝试解码它们并失败提交... - 我已准备好解决这个问题并在线工作。
http://www.planethost.gr/IdeaWithHiddenPart.gif
包含许多单词的页面,人类必须选择正确的单词。我也创造了这个,很简单。单词是可引用的图像,用户必须单击右侧的图像。
http://www.planethost.gr/ManyWords.gif
与之前相同,但有div和文字或小图标。用户必须只点击正确的一个div / letter / image,无论如何。
http://www.planethost.gr/ArrayFromDivs.gif
还有一个我的 CicleCaptcha ,用户必须在图片上找到一个点。如果他找到并点击它,那么就是一个人,机器可能会失败,或者需要制作新的软件才能找到一种方法。
http://www.planethost.gr/CicleCaptcha.gif
欢迎任何评论家。
答案 20 :(得分:9)
Best captcha ever!也许你需要这样的东西来注册以保持riff-raff。
答案 21 :(得分:7)
最近,我开始添加一个名称和标识设置为“message”的标记。我用CSS(display:none)将其设置为隐藏。垃圾邮件机器人看到它,填写并提交表单。服务器端,如果填写了带有id名称的textarea,我将帖子标记为垃圾邮件。
我正在研究的另一种技术是随机生成名称和ID,其中一些是垃圾邮件检查,另一些是常规字段。
这对我来说效果很好,我还没有收到任何成功的垃圾邮件。但是,我的网站访问者数量要少得多:)
答案 22 :(得分:6)
非常简单的算法很好。盲人将能够回答。 (但正如Jarod所说,谨防操作符优先。)我认为有人可以编写解析器,但它会使垃圾邮件更加昂贵。
非常简单,围绕它编码并不困难。我在这看到两个威胁:
使用简单的算术,你可能会击败威胁#1,但不能击败威胁#2。
答案 23 :(得分:5)
如果您使用了您所拥有的验证码创意的组合(选择其中任何一个 - 或随机选择其中一个),该怎么办:
添加了完全相同的验证码在页面的css隐藏部分 - 蜜罐的想法。这样,你就有一个地方可以找到正确的答案而另一个地方答案应该保持不变。
答案 24 :(得分:5)
实际上,有一个与编程相关的验证码集可能是一个想法。例如:
有可能有人建立一个语法检查器来绕过这个,但绕过验证码还有很多工作要做。你会想到有一个相关的验证码。
答案 25 :(得分:5)
通过简单的“将此字段留空:”字段,我获得了非常好的结果。机器人似乎填补了所有内容,特别是如果您将字段命名为“URL”。结合严格的推荐人检查,我还没有机器人通过它。
请不要忘记此处的辅助功能。对于许多使用屏幕阅读器的人来说,Captchas是众所周知的无法使用的。简单的数学问题,或非常琐碎的琐事(我喜欢“天空是什么颜色”问题)对视力受损的用户更友好。
答案 26 :(得分:5)
简单的文字听起来很棒。 贿赂社区做这项工作!如果你像我一样相信SO代表点衡量用户帮助网站成功的承诺,提供声誉点来帮助保护网站是完全合理的来自垃圾邮件发送者。
为一个简单问题和一组正确答案的每个贡献提供+10声望。问题应该与所有现有问题相距很远(编辑距离),如果人们无法回答,那么声誉(和问题)应该逐渐消失。假设正确答案的失败率超过20%,那么提交者每个错误答案会丢失一个声誉点,最多15个。所以如果你提交了一个不好的问题,你现在得+10,但最终你会净-5。或者,让一个用户样本投票决定验证码问题是否合适也是有道理的。
最后,就像每日代表上限一样,假设用户无法通过提交验证码问题获得超过100的声誉。这是对这些贡献的权重的合理限制,它还可以帮助防止垃圾邮件发送者将问题引入系统。例如,您可以选择不具有相同概率但概率与提交者声誉成比例的问题。 Jon Skeet,请不要提出任何问题: - )
答案 27 :(得分:5)
对服务器的加密随机数进行AJAX查询。服务器发回包含nonce的JSON响应,并设置包含nonce值的cookie。在JavaScript中计算nonce的SHA1哈希值,将值复制到隐藏字段中。当用户POST表单时,他们现在使用nonce值发回cookie。从cookie中计算nonce的SHA1哈希值,与隐藏字段中的值进行比较,并验证在过去15分钟内是否生成了该nonce(memcached对此有利)。如果所有这些检查都通过,请发表评论。
这种技术要求垃圾邮件发送者坐下来确定发生了什么,一旦他们这样做,他们仍然必须发起多个请求并保持cookie状态以获得评论。另外,如果他们首先解析并执行JavaScript并发出AJAX请求,他们只会看到Set-Cookie
标头。这比大多数垃圾邮件发送者愿意接受的工作要多得多,特别是因为这项工作仅适用于单个网站。最大的缺点是任何关闭JavaScript或禁用cookie的人都被标记为潜在的垃圾邮件。这意味着审核队列仍然是一个好主意。
从理论上讲,这可以通过默默无闻来获得安全性,但在实践中,这是非常好的。
我从来没有见过垃圾邮件发送者努力打破这种技术,但也许每隔几个月我会手动输入一个主题垃圾邮件条目,这有点怪异。
答案 28 :(得分:5)
这里提到的所有解决方案都是通过人工解算器方法来规避的。一个专业的spambot会保留数百个连接,当它无法解决CAPTCHA本身时,它会将屏幕截图传递给远程人工解算器。
我经常读到CAPTCHAs的人工解决方案违反法律。嗯,这是由那些不知道这个(垃圾邮件)行业如何运作的人写的 人工解算器不直接与他们解决的CAPTCHAs站点进行交互。他们甚至不知道CAPTCHA是从哪些站点获取并发送给他们的。我知道有数十家(如果不是数百家)公司或/和提供人工解算器服务的网站,但没有一家网站直接与董事会打交道。 后者不违反任何法律,因此CAPTCHA解决完全合法(和官方注册)的商业公司。他们没有犯罪意图,例如,可能被用于远程测试,调查,概念验证,原型设计等。
AI(人工智能)机器人在不同时间(不同国家/地区)的不同IP地址确定上下文并维护上下文敏感对话。甚至博客的作者也经常不理解评论来自机器人。我不会详细介绍许多细节,但是,例如,机器人可以网络化人工对话,将它们存储在数据库中,然后简单地重复使用它们(逐个词组),因此它们不会被软件甚至人类检测为垃圾邮件。
以及honeypot answer,这个帖子中的大多数答案都是完全错误的 我敢说他们是受害者注定的方法
大多数垃圾邮件程序通过来自不同IP(不同国家/地区)的本地和远程javascript感知(修补和管理)浏览器工作,并且他们非常聪明地规避蜂蜜陷阱和蜜罐。
不同的问题是,即使博客所有者也不能经常检测到评论来自机器人,因为它们实际上来自人类对话和从其他网页收集的评论(论坛,博客评论等)
抱歉,我删除了这个部分
答案 29 :(得分:4)
有人还建议使用Raphael JavaScript库,这显然可以让你在所有流行的浏览器中使用客户端:
http://dmitry.baranovskiy.com/raphael/
..但这不适用于我的<noscript>
案例,现在会吗? :)
答案 30 :(得分:4)
我必须承认,我没有与spambots战斗的经验,也不知道它们有多复杂。也就是说,我在jQuery文章中看不到任何纯粹在服务器上无法完成的内容。
从jQuery文章中重新概述摘要:
另一种选择,如果你想使用传统的图像CAPTCHA而没有在每个请求上生成它们的开销,那就是离线预生成它们。然后你只需要随机选择一个以显示每个表格。
答案 31 :(得分:4)
我会根据CAPTCHA做一个简单的时间。
启用JavaScript:检查发布时间减去大于HUMANISVERYFASTREADER的加载时间。
禁用JavaScript:时间HTTP请求开始减去时间HTTP响应结束(存储在会话或隐藏字段中)大于HUMANISVERYFASTREADER加上NETWORKLATENCY乘以2。
在任何一种情况下,如果它返回true,则重定向到图像CAPTCHA。 这意味着大多数时候人们不必使用CAPTCHA图像,除非读者速度非常快或垃圾邮件机器人设置为延迟响应。
请注意,如果使用隐藏字段,我会使用随机ID名称,以防机器人检测到它被用作CAPTCHA并尝试修改该值。
另一种完全不同的方法(仅适用于JavaScript)是使用jQuery Sortable函数允许用户对一些图像进行排序。也许是一个小的3x3拼图。
答案 32 :(得分:4)
有些人声称这些解决方案从未被机器人破坏过。我认为这些问题是你也不知道有多少人没能通过'CAPTCHA'。
网站不会对人类用户造成极大的不友好。在互联网上开展业务的代价似乎是你必须处理一些忽略垃圾邮件的手工工作。拒绝用户的CAPTCHA(或类似系统)比没有CAPTCHA更糟糕。
不可否认,StackOverflow拥有非常知识渊博的受众群体,因此可以使用更多创意解决方案。但是对于更多的普通网站,你实际上只能使用人们习惯的东西,否则你只会造成混乱并失去网站访问者和流量。通常,不应将CAPTCHA调整为停止所有机器人或其他攻击媒介。这对合法用户来说太难了。从容易开始并使其变得更加困难,直到垃圾邮件级别处于可管理的水平,但不能更多。
最后,我想回到基于图像的解决方案:您不需要每次都创建新图像。你可以预先创建大量的(可能是几千?),然后随着时间的推移慢慢改变这个集合。例如,每10分钟或每小时使100张最旧的图像到期,并用一组新图像替换它们。对于每个请求,从整个集合中随机选择一个CAPTCHA。
当然,这不会经受定向攻击,但正如之前多次提到的那样,大多数CAPTCHA都不会。但是,停止随机机器人就足够了。
答案 33 :(得分:4)
这个使用1px块来生成看起来像图像但纯html / css。请参阅此处的链接以获取示例:http://www.nujij.nl/registreren.2051061.lynkx?_showInPopup=true
答案 34 :(得分:3)
谁说你必须每次请求创建服务器上的所有图像?也许你可以有一个静态的图像列表或从flickr拉出它们。我喜欢“点击小猫”验证码。 http://www.thepcspy.com/kittenauth
答案 35 :(得分:3)
reCAPTCHA大学赞助并帮助数字化书籍。
我们生成并检查扭曲的图像,因此您无需运行昂贵的图像生成程序。
答案 36 :(得分:3)
基于CSS的CAPTCHA怎么样?
<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”。当然,使用自定义机器人仍然很容易解决。
答案 37 :(得分:3)
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
答案 38 :(得分:3)
我认为文本验证码方法的问题在于文本可以被解析并因此得到解答。
如果你的网站很受欢迎(比如Stackoverflow)以及那些喜欢代码的人(比如Stackoverflow),很可能会有人将“破解验证码”作为一个简单的javascript易于取胜的挑战+ greasemonkey。
因此,例如,一个隐藏的彩色字母方法建议在线程的某个地方(一个很酷的想法,想法,确实),可以通过以下示例行的简单解析轻松打破:< / p>
<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)等。
同样,如果您有一系列问题(what color is an orange?
,how many dwarves surround snowwhite?
),除非您有数千个问题,否则可以选择其中的30个,提出问题答案哈希和让脚本机器人重新加载页面,直到找到其中一个。
答案 39 :(得分:3)
验证码过滤器的理论思路。询问用户的问题,服务器可以以某种方式轻易回答,用户也可以回答。共享答案成为用户和服务器都知道的一种公钥。
Stack Overflow相关示例:
用户XYZ有多少声誉点?
提示:请在屏幕一侧查看此信息,或点击此链接。 用户可以从已知的堆栈溢出用户中随机拉出。
更通用的例子: 你住在哪里? 你住的星期六9点的天气状况如何? 提示:使用雅虎天气并提供湿度和一般条件。
然后用户输入他们的答案
西雅图 部分混浊,85%湿度
计算机确认当时西雅图确实存在天气状况。
答案对用户来说是独一无二的,但服务器可以查找并确认答案。
问题的类型可以有所不同。但是这个想法是你对人类必须查找的事实组合进行一些处理,而服务器可以简单地查找。该过程是一个两部分对话,需要一定程度的相互理解。这是一种反向转弯测试。让人类证明它可以提供可计算的数据,但它需要人类的知识来产生可计算的数据。
另一种可能的实施方式。你叫什么名字,你什么时候出生的?
人类将提供已知答案,计算机可以在数据库中查找信息。
也许一个数据库可以由机器人填充,但机器人需要有一些智能将相关的事实放在一起。服务器端的数据库或查找表可以系统地修剪明显的垃圾邮件,如属性。
我确信在实施过程中存在缺陷和细节。但这个概念似乎很合理。用户提供服务器可以查找的事实组合,但服务器可以控制应该询问的组合类型。组合可以随机化,服务器可以使用各种策略来查找共享答案。真正的好处是,您要求用户在答案中提供某种形式的分析和启示。这使得机器人更难以系统化。一堆计算机开始在许多服务器和验证码表单中使用相同的答案,例如
我是1972年下午3:45出生的机器人。
然后,整个网络可以对这种响应进行分析和使用,以阻止机器人,有效地使自动化在几次迭代后毫无价值。
当我想到这一点时,实施一个基本的阅读理解测试来评论博客文章会很有趣。在博客文章结束后,作者可以向他或她的读者提出问题。这个问题可能是每个博客文章的独特之处,它还有一个额外的好处,就是要求用户在评论之前实际阅读。人们可以在帖子的末尾写下简单的问题,答案存储在服务器端,然后有一系列无意义的问题来为数据库加盐。
这篇文章是否谈到紫色验证码技术? 服务器端答案(错误,否)
这是关于验证码的帖子吗? 服务器端答案(是的,是的)
这是关于迈克尔杰克逊的帖子吗? 服务器端答案(错误,否)
以随机顺序呈现几个问题并使订单显着有用似乎很有用。例如以上会=不,是,不。对顺序进行随机播放,并将无意义问题与“无”和“是”答案混合在一起。
答案 40 :(得分:3)
请致电xxxxx xxxxxxx,让我们谈谈你所在的天气。
但是,这些日子过于快速且过于大规模地以利润为导向,即使与我们选择的服务提供商打一次电话对提供商而言也太昂贵(时间很宝贵)。
我们接受了大部分时间谈论机器。
悲伤的时候......
答案 41 :(得分:3)
如果您使用具有不同颜色字母的CAPTCHA,并且要求用户仅输入特定颜色的 ,该怎么办?
答案 42 :(得分:3)
在我的博客上,除非启用了javascript,否则我不接受评论,并通过ajax发布。它阻止了所有机器人。我收到的唯一垃圾邮件来自人类垃圾邮件发送者(他们通常会复制并粘贴网站上的一些文字以生成评论)。
如果您必须拥有非JavaScript版本,请执行以下操作:
以下字符串[y] 中的[x]的[某些操作]给定一个无法用正则表达式解决的足够复杂的[x]和[y],很难编写解析器
计算[dog,dangerous,danceable,cat] = 2
中的短字数[狗,危险,可跳舞,灾难] =狗
中最短的单词是什么?在[fish,mealy,box,stackoverflow] = box
中以x结尾的单词哪个网址在[apple.com,stackoverflow.com,fish oil.com]中是非法的= fish oil.com
这一切都可以轻松完成服务器端;如果选项的数量足够大并且经常轮换,则很难全部获得它们,而且永远不会每天给同一个用户多次使用相同的类型
答案 43 :(得分:3)
我一直在使用http://stopforumspam.com作为防范机器人的第一道防线。在我实现它的网站上,几乎所有的垃圾邮件发送者都没有使用CAPTCHA。
答案 44 :(得分:2)
我在一段时间内运行的phpBB 2.0网站上遇到了大量的垃圾邮件问题(该网站现已升级)。
我安装了一个我在pbpBB论坛上找到的自定义验证码模块,它在一段时间内运行良好。我发现真正的解决方案是将其与[帐户创建页面]上的其他“必填”字段相结合。我加了位置和职业(世俗,但却很方便)。
机器人从未试图填补这些内容,仍然假设验证码是每次尝试的失败点。
答案 45 :(得分:2)
你看过Waegis吗?
“Waegis是一个公开API(应用程序编程接口)的在线Web服务。它通过API方法获取传入数据,并快速检查并按时识别垃圾邮件和合法内容。然后将结果返回给客户端指定内容是否为垃圾邮件。“
答案 46 :(得分:2)
如果没有实际的CAPTCHA作为第一个防线,您是否仍然容易受到垃圾邮件发送者脚本浏览器的攻击(使用VB和IE琐碎)?即加载页面,导航DOM,单击提交按钮,重复...
答案 47 :(得分:2)
我的解决方案是将表单放在单独的页面上并将时间戳传递给它。在该页面上,如果时间戳有效(不太快,不太旧),我只显示表单。我发现机器人总是直接点击提交页面,只有人类会正确地在那里导航。
如果您在内容页面上拥有该表单,则无法正常工作,但您可以显示/隐藏基于NoScript的特殊提交页面的链接。对于如此小比例的用户而言,这是一种轻微的不便。
答案 48 :(得分:2)
如果你过去倾向于问答解决方案,我已经向用户提供了3-5个随机问题的下拉列表,他们可以从中选择,然后回答以证明他们是人。每个页面加载时列表的排序方式不同。
答案 49 :(得分:2)
即使使用rep,仍然应该有一些类型的验证码,以防止恶意脚本攻击。
答案 50 :(得分:2)
我编写了一个PHP类,它允许您选择使用某类Captcha Question(数学,命名,对立,完成),或随机化使用哪种类型。这些是大多数讲英语的孩子可以回答的问题。 例如:
答案 51 :(得分:2)
您是否曾计划为Stackoverflow提供API,以便以编程方式处理问题/答案?如果是这样,基于CAPTCHA的保护如何适应这个?
虽然通过Atom联合提供仅提供丰富的只读接口,但人们可以创建一些有趣的智能客户端/工具来组织和搜索Stackoverflow的大量内容;我可以看到具有Web界面之外的功能来询问和/或回答问题以及对内容进行投票非常有用。 (虽然这可能与基于广告的收入模式不一致。)
我更希望看到Stackoverflow使用启发式监控方法来尝试检测恶意活动并阻止违规用户,但是可以理解如何使用CAPTCHA可能是一种更简单的方法,您的版本数据很快就会出现。
答案 52 :(得分:2)
这是按次注册而不是按帖,对吧?因为这会破坏网站,即使使用jQuery自动化。
答案 53 :(得分:2)
使用简单的文本CAPTCHA,然后要求用户向后输入答案,或者只输入第一个字母,最后一个字母或其他随机内容。
另一个想法是制作一个像这样的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。
答案 54 :(得分:2)
如果您想要基于ASCII的方法,请查看集成FIGlet。你可以制作一些自定义字体,并为每个字符做一些字体选择随机化,以增加熵。字距调整使文本在视觉上更令人愉悦,并且机器人更难以进行逆向工程。
如:
______ __ ____ _____ / __/ /____ _____/ /__ / __ \_ _____ ____/ _/ /__ _ __ _\ \/ __/ _ `/ __/ '_/ / /_/ / |/ / -_) __/ _/ / _ \ |/|/ / /___/\__/\_,_/\__/_/\_\ \____/|___/\__/_/ /_//_/\___/__,__/
答案 55 :(得分:2)
不是最精致的反垃圾邮件武器,但嘿,微软赞同:
Nobot-Control(AjaxControlToolkit的一部分)。
NoBot可以通过违反上述任何技术进行测试:快速回发,多次回发或在浏览器中禁用JavaScript。
演示:
http://www.asp.net/AJAX/AjaxControlToolkit/Samples/NoBot/NoBot.aspx
答案 56 :(得分:2)
简单的数学不是答案 - 垃圾邮件发送者甚至不需要编写简单的解析器。 Google will do it for them, even if you use words instead of number so it just requires a quick search on google, and it's done.
It can do text to numerical conversions easily too
在SO的渲染中似乎存在某种错误,因为它只显示发布时的第一个链接,即使预览工作正常。第二个链接是 - 去谷歌,并搜索“1 *四十二”
答案 57 :(得分:2)
如果不使用验证码图像的主要问题是创建这些图像的CPU负载,那么在CPU负载“轻”时找出创建这些图像的方法可能是个好主意(相对而言) 。没有理由需要在生成表单的同时生成验证码图像。相反,您可以从上一次服务器负载“轻”生成的大型验证码缓存中提取。您甚至可以重用缓存的验证码(如果表单提交中有一个奇怪的峰值),直到您在下次服务器加载“轻”时重新生成一堆新的。
答案 58 :(得分:2)
在任何基于CAPTCHA的问题中都要小心文化偏见。
答案 59 :(得分:2)
最好的CAPTCHA系统是滥用计算机科学中P = NP问题的系统。自然语言问题可能是滥用这些问题的最好,也是最简单的问题。任何问题都可以通过简单的谷歌查询进行一些检查(即我们太阳系中的第二颗行星是什么?这是一个很好的问题,而2 + 2 =?不是)在这种情况下是一个值得的候选人。 / p>
答案 60 :(得分:2)
如何使用像div这样的样式化HTML元素来显示验证码呢?从矩形区域构建字母很容易,很难分析它们。
答案 61 :(得分:2)
不是技术解决方案,而是理论解决方案。
1.给出了一个词或声音。 “将鼠标移动到屏幕的左上角,然后单击橙色按钮”或“单击此处,然后单击此处”(需要多步响应) 完成任务后,问题就解决了。选择页面上已有的对象以单击它们。完成至少两个动作。
希望这会有所帮助。
答案 62 :(得分:2)
Ajax Fancy Captcha基于图像,除了您必须根据形状识别拖放而不是键入图像中包含的字母/数字。
答案 63 :(得分:2)
我确信大多数页面都是使用支持鼠标悬停的控件(按钮,链接等)构建的。
这只是一种不同的方法,我实际上没有实现这种方法。但这是可能的。
答案 64 :(得分:2)
我编写了一个非常重要的新闻网站,一直在搞乱验证码和分析垃圾邮件机器人。
我的所有解决方案都适用于中小型网站(与本主题中的大部分解决方案一样)
这意味着它们会阻止发布垃圾邮件机器人,除非他们为您的网站制定特定的解决方法(当您很大时)
我发现一个非常好的解决方案是垃圾邮件机器人在发布之后48小时内没有访问您的文章。 新闻网站上的一篇文章在发布后的48小时内获得了大部分观点,它允许未注册的用户在不必输入验证码的情况下发表评论。
我见过的另一个不错的验证码系统是由WebDesignBeach制作的 你有几个对象,你必须拖动&amp;将一个放入特定区域。非常原创,不是吗?
答案 65 :(得分:2)
修复语法错误CAPTCHA:
echo "Hello, world!;
for (int $i = 0; $i < 10; $i ++ {
echo $i /*
}
随机删除了parens和引号。
Bots可以自动检查语法错误,但他们不知道如何修复它们!
答案 66 :(得分:1)
@ pc1oad1etter我在发帖后也注意到了。但是,这只是一个想法而不是实际的实现。改变字体或使用不同的颜色而不是粗体/斜体可以轻松解决可用性问题。
答案 67 :(得分:1)
@lance
谁说你必须在每次请求时在服务器上创建所有图像?也许你可以有一个静态的图像列表或从Flickr中提取它们。我喜欢“点击小猫”CAPTCHA的想法。 http://www.thepcspy.com/kittenauth
如果从静态图像列表中提取,那么绕过CAPTCHA就变得微不足道了,因为人类可以对它们进行分类,然后机器人就能够轻松应对挑战。即使机器人无法回答所有问题,它仍然可以发送垃圾邮件。它只需要能够回答一小部分CAPTCHA,因为它总是可以在尝试失败时重试。
这实际上是谜题等问题,因为要面对大量挑战是非常困难的。
答案 68 :(得分:1)
@rob
蜜罐验证码怎么样? 哇,这么简单!看起来不错!虽然他们已经强调了可访问性问题。你认为这会是一个问题吗?我个人觉得很难想象开发人员/程序员难以阅读屏幕到他们需要屏幕阅读器的程度?
有些开发人员不仅仅是法律上失明,而是100%盲目。走的手杖和帮手狗。我希望该网站能以合理的方式支持他们。
然而,使用蜜罐验证码,您可以放置一个隐藏的div,告诉他们将该字段留空。如果他们填写它,你也可以把它放在错误信息中,所以我不确定这里有多少问题可访问性。这绝对不是很好,但可能会更糟。
答案 69 :(得分:1)
回答原来的问题:
我看过动物的照片[它是什么?]。漫画的投票使用一个角色的图片,其名称写在图像的某处[名称中的类型]。不可能解析,不适合盲人。
你可以有一个音频后备阅读字母数字(你在验证码中有相同的字母和数字)。
最后的防线:使垃圾邮件易于报告(一次点击)并且易于删除(一个回顾屏幕检查它是垃圾邮件帐户,显示最后十个邮件,一次点击删除帐户)。但这仍然是耗时的。
答案 70 :(得分:1)
如何显示九个随机几何形状,并要求用户选择两个正方形,或两个圆形等等......应该很容易编写,并且易于使用..
没有什么比让你无法正确阅读的文字更糟糕了......
答案 71 :(得分:1)
我认为他们正致力于节流。对于具有500+代表的用户禁用CAPTCHA并为攻击者重置代表更有意义。
答案 72 :(得分:1)
我最近(不记得在哪里)看到一个系统显示了一堆图片。每张图片都分配了一个字符。然后要求用户输入一些图片的字符,这些图片显示某些类别的例子(汽车,计算机,建筑物,鲜花等)。每次更改图片和字符以及构建CAPTCHA字符串的类别。
唯一的问题是与此方法相关的更高带宽,您需要大量按类别分类的图片。没有必要浪费太多资源来生成图片。
答案 73 :(得分:1)
我的建议是一个ASCII验证码,它不使用图像,它是程序员/怪人。 这是一个PHP实现http://thephppro.com/products/captcha/这个是付费的。 还有一个免费的PHP实现,但我找不到一个例子 - &gt; http://www.phpclasses.org/browse/package/4544.html
我知道这些都是用PHP编写的,但我相信你很聪明的人可以把它“移植”到你最喜欢的语言。
答案 74 :(得分:1)
如前所述,在实施蜜罐验证码方法后,我们的垃圾邮件已大幅削减。我相信自从实施以来我们还没有收到任何信息。
答案 75 :(得分:1)
也许社区可以提出一些好的基于文本的CAPTCHA?
然后我们可以根据得票最多的人提出一个好的清单。
答案 76 :(得分:1)
答案 77 :(得分:1)
如何检查JavaScript是否已启用?
使用此网站的任何人肯定会启用它。据人们所说,Spambots不会启用JavaScript。
答案 78 :(得分:1)
CAPTCHAs检查您是人还是计算机。 问题是,之后计算机需要判断你是否是人。
因此,解决方案是让一个用户填写CAPTCHA并让下一个用户检查它。 问题当然是时间差距。
答案 79 :(得分:1)
我认为我们必须假设这个网站会定期受到针对性攻击,而不仅仅是通用的漂移机器人。如果它成为程序员搜索的第一个点击,它将绘制一个很多的火。
对我而言,这意味着任何CAPTCHA系统都无法从重复的问题列表中提取,而人类可以手动将其输入机器人,此外还有机器人无法使用。
答案 80 :(得分:1)
许多这些JavaScript解决方案是否适用于屏幕阅读器?减去有意义的alt属性的图像可能会中断WCAG。
答案 81 :(得分:1)
我知道清除机器人的一种方法是将密钥存储在用户的cookie中,如果密钥或cookie不存在则假设它们是机器人并忽略它们或者退回到图像CAPTCHA中。这也是防止为机器人创建大量会话/跟踪的一种非常好的方法,这会给您的数据库增加很多噪音或者会增加系统性能。
答案 82 :(得分:1)
有一件令人困惑的事情是谷歌,显然世界上拥有最多CS博士的公司可能会破坏他们的Captcha,而且似乎对此毫无作用。
答案 83 :(得分:1)
将数学问题作为IMAGE发布,为清晰起见,可能附带括号。
图像中只有清晰可见的文字。
(2+5)*2
答案 84 :(得分:1)
你不仅希望人类发帖。你想要人类可以讨论编程主题。所以你应该有一个琐事验证码,如:
以下C函数声明的含义是什么:char *(*(**foo [][8])())[];
?
=)
答案 85 :(得分:1)
这句话的第五个字是哪种颜色?红色?,蓝色,绿色?
(充分的颜色词)
答案 86 :(得分:1)
我认为定制的CAPTCHA是你最好的选择。这样它需要一个特定目标的bot /脚本来破解它。此努力因素应减少尝试次数。人类毕竟是懒惰的
答案 87 :(得分:1)
我有几个解决方案,一个需要JavaScript,另一个不需要。两者都比7 + 4更难打败,但它们并不像reCaptcha那样难以看到海报。我提出了这些解决方案,因为我需要为AppEngine设置验证码,这会给人们带来更有限的环境。
无论如何,这里是演示的链接:http://kevin-le.appspot.com/extra/lab/captcha/
答案 88 :(得分:1)
可以在客户端根据从服务器传递的基于矢量的信息创建图像。
这应该减少服务器上的处理和传输的数据量。
答案 89 :(得分:1)
我推荐琐事问题。并非每个人都能理解字母的ASCII表示,并且具有多个操作的数学问题可能会让人感到困惑。
答案 90 :(得分:1)
如何使用ASP.NET Ajax NoBot?它似乎对我来说很有用。它不是很棒,但也不错。
答案 91 :(得分:1)
我喜欢“伟大的rom网络”中使用的验证码: link text
点击彩色微笑,很有趣,每个人都能理解......除了机器人哈哈
答案 92 :(得分:1)
只是把它扔出去。我的一个联系表单上有一个简单的数学问题,只是问了
什么是[编号1-12] + [编号1-12]
我可能每月收到5-6个垃圾邮件,但我没有那么多流量。
答案 93 :(得分:1)
我非常喜欢此网站上使用的验证码方法:http://www.thatwebguyblog.com/post/the_forgotten_timesaver_photoshop_droplets#commenting_as
答案 94 :(得分:1)
当我看到关于Human Computation的视频(视频是关于如何使用人类通过游戏标记图像)构建验证码系统时,我有了一个想法。可以使用这样的系统标记图像(可能用于其他目的),然后使用有关标记的统计信息来选择适合验证码使用的图像。
说出&gt; 90%的人用'cat'或'skyscraper'标记图像的图像。然后,人们可以呈现图像,询问图像最明显的特征,这将是图像的主要标记。
这可能超出了SO的范围,但有人可能会发现这是一个有趣的想法:)
答案 95 :(得分:1)
这是我的验证码工作:
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
当然,数字是随机的,因为行和列的选择以及左/右上/下的选择。一个发表评论的人告诉我'安全问题糟透了dick btw':
http://jwm-art.net/dark.php?p=louisa_skit
点击“添加评论”。
答案 96 :(得分:1)
我有一个vBulletin论坛,收到了大量的垃圾邮件。添加一个额外的规则修复了所有;让人们输入一个单词的大写字母。由于我们的网站名为'TrefPuntMagic',他们必须输入'TPM'。我知道它不是动态的,如果垃圾邮件发送者想要真正垃圾邮件我们的网站,他们可以解决方法,但我们只是他们定位的许多vBulletin论坛中的一个,这是一个简单的解决方法。
答案 97 :(得分:1)
为什么不设置用户可以回答他们喜欢的语言的简单编程问题 - 然后在服务器上运行代码并查看它是否有效。通过在不同的随机文本上运行答案来避免人类验证码农场。
实施例: “从 - s = hihiuhi@ewfwef.cfwe”提取域名
Python中的答案: “return = etc。”
其他子站点的类似领域特定知识。
所有这些都有标准配方,可以自动测试,但使用随机字符串或值进行测试。
显然这个想法有很多缺陷;)
此外 - 每5分钟只允许一次登录尝试。
答案 98 :(得分:1)
将它连接到聊天室将是一种有趣的方式来进行验证码。一种现场图灵测试。显然,它依赖于有人在线提问。
答案 99 :(得分:1)
音频怎么样?提供带有声音的音频样本。让用户输入他所听到的内容。这也可能是他确定的声音效果。
作为奖励,这可以帮助语音识别器创建隐藏式字幕,就像RECAPTCHA帮助扫描书籍一样。
可能是愚蠢的......只是得到了这个想法。
答案 100 :(得分:1)
你试过http://sblam.com/en.html吗? 据我所知,它是验证码的一个很好的选择,它对用户来说是完全透明的。
答案 101 :(得分:1)
我认为比特币是一个非常实用的非基于图像的验证码 - 详见http://bitcoin.org。
人们在注册时发送微支付,确认后可以退回。你没有得到你花在试图找出验证码的时间。
答案 102 :(得分:-3)
一种选择是带外通信;服务器可以向用户发送即时消息(或短信?),然后他/她必须在验证码字段中输入。
这会对用户产生“要么/或”要求 - 要么必须启用JavaScript,要么必须登录到您选择的IM服务。虽然它可能不像上面的其他一些解决方案那样灵活,但它适用于绝大多数用户。
拥有编辑权限的人可以随意添加到优点/缺点,而不是提交单独的回复。
优点:
缺点: