验证码 要求用户阅读扭曲的文本对于视力正常的人来说很好,但对于盲人或有其他残疾的人来说是一个可怕的障碍。有时可以使用音频替代品,但仍然无法帮助那些既聋又盲的人,并且可能很难与屏幕阅读器一起使用(屏幕阅读器已经在向您朗读文字)。

存在一些使用人类代表用户来解决验证码的解决方案,例如 网络可视化索罗纳, ,但这些依赖于志愿者操作员的可用性(例如,索罗纳显然只有一名志愿者,所以当你需要帮助时你必须希望他是醒着的)。

我发现盲人所需的验证码解决方案数量非常少 - 我猜在像英国这样的人口大国每天不到几百个。这意味着,与想要在短时间内多次执行某项操作的坏人不同,针对盲人的验证码辅助服务可以投入大量的计算资源 - 例如, 亚马逊EC2 - 识别所呈现的文本。

我的问题是这样的:假设您不太关心速度,并且您有很多可用的计算机,是否有算法可以让您解决当今常见的文本扭曲验证码,例如 验证码?或者即使有大量的资源和时间,这些问题真的很难解决吗?

一些注意事项:

  1. 在这一点上,我的问题只是理论上的,但显然任何此类服务都必须仔细控制访问以阻止垃圾邮件发送者。也许只有注册的盲人才被允许使用它。

  2. 我知道 旧的雅虎验证码已损坏 几年前,使用一种在单台计算机上几秒钟内运行的算法。我问的是现代验证码是否可以被破解,也许更慢并且需要更多的资源。

  3. 我知道一些新的验证码类型正在出现,要求用户 识别小猫 或者 调整图片方向. 。这些还没有广泛传播,所以我现在只是询问文本扭曲的问题。

有帮助吗?

解决方案

基本上解决文本失真验证码由三个单独的步骤组成:

  1. 找出有趣的部分在哪里
  2. 将文本分割成单独的字母
  3. 认识字母

剩下的唯一对计算机来说相当困难的问题是第二个问题。第一个通常并不难,除非你碰巧发现 来自地狱的验证码. 。第三个问题由计算机解决,其成功率比人类高得多。

一个了解验证码如何被破解的有趣网站是 OCR研究团队.

其他提示

创建验证码是为了避免机器检测到这些单词。它仅供人类阅读。让盲人/聋人更容易阅读会增加机器再次理解它们的风险,从而抵消它们的效果。

不过,垃圾邮件发送者确实找到了一种非常有效的方法来破解更流行的验证码。他们只是雇佣廉价劳动力来阅读它们,以换取每个工作帐户几美分的报酬。因此,出现了一个围绕破解验证码创建数百万个帐户的小行业,这些帐户随后可用于发送更多垃圾邮件。与垃圾邮件发送者获得的收益相比,成本几乎为零。盲人/聋人也可以使用类似的解决方案,他们将验证码图像发送给中国或其他地方的一些廉价劳动力,他们会用正确的单词回复,盲人/聋人将能够继续。不幸的是,盲人只需要几次这种服务,而垃圾邮件发送者需要持续不断的流量,因此这些劳动者宁愿为垃圾邮件发送者工作。(报酬更好。)不过,最好的解决方案是将验证码发送给一些朋友,让他们阅读和/或破译它并返回答案。

ReCAPTCHA 风格也会读出单词。一个简单的语音识别应用程序可能能够识别所说的任何内容,尽管语音识别仍然需要更多优化。不过,您可能希望从这个角度开始工作,让应用程序监听声音字节。

当有可能破解验证码时,他们只会想到更好的类似验证码的方法。OCR 技术仍在不断改进,因此需要做更多的工作来提高验证码的难度。也就是说,直到 OCR 在识别单词方面变得与人眼一样好......

可以创建一种算法,尽管速度很慢。有26个小写字母、26个大写字母和10个数字,想出一个算法应该不会太难。不过,对于 Serif 和 Sans-serif 字体,组合数量需要加倍。不过,如果您尝试以与验证码中的字母类似的方式弯曲所有字母,您应该能够检测到被验证码字母覆盖最多的字母。那将是最有可能的候选人。仍然需要清除图像中的线条、污垢和其他伪影,而人眼比计算机更容易识别这些伪影。您需要执行以下步骤:

  1. 清理图像。
  2. 检测字母的位置。
  3. 每个字母3a。通过检查左侧确定字母的曲线。3b.对每个可能的字母/数字进行叠加,找到最能覆盖它的字母/数字。(这是最有可能的字母。)
  4. 找到该单词后,请查字典以确保它是真实的单词。(除非验证码不使用真实的单词。)

尽管他们可以扭曲验证码中的字母,但只需查看每个字母的左侧,然后尝试将相同的曲线应用于每个字母,就应该可以检测到他们使用的扭曲旋转。(52 个组合,如果还使用数字,则加上 10 个数字。)基本上,您会尝试在每个字母周围放置一个框,然后检查哪个字母包含最少的空格。这是最有可能的信。

OCR 不经常使用这种方法的主要原因基本上是对速度的需要。步骤 3a/b 往往会很慢,尤其是当您必须考虑字体样式时。


让这个答案变得更大,但回复其中一条评论:

有多种方法可以清理图像。您需要一些颜色过滤、降噪和能够识别图像中的噪声线的算法。这 德福康 您指向的幻灯片显示了一些过滤掉一些噪音的简单技术。它表明基本的图像处理工具已经可以使图像更加清晰以供机器读取。简单的模糊可以清理随机的点和细线,而滤色镜可以过滤掉嘈杂的颜色。下一步是尝试在验证码中的每个字母周围放置一个方框,希望系统能够识别它们的位置。我不知道任何实用的算法,但应该有方法来识别它们。有软件可以从位图创建矢量图像,因此应该有软件能够计算字母周围的框。这个盒子很可能没有矩形角,因此您必须扭曲所有 52 个字母才能匹配同一个盒子。斜体或粗体应该没有太大区别,因为这些样式只是额外的扭曲。不过,衬线或无衬线确实有所不同。衬线字体往往有更多的尖刺和装饰。幸运的是,有一些算法可以将盒子转换为任何其他有四个角的图形。

常规 OCR 应用程序会假设字母大多是直的,并且只会检查一些热点来查找匹配项。因此,他们有时会因为噪音而出错。要破解验证码,您需要更灵敏的匹配,最好将验证码字母图像与 52 个字母之一的图像进行“异或”,然后计算黑白点的数量来计算比率。假设白色=1,黑色=0,则异或的结果应该几乎是黑色以获得最佳匹配。

我认为一些垃圾邮件发送者已经找到了一些有用的算法来破解验证码,但对他们来说,对这些算法保密只会让他们继续营业。


另一条评论,更多文字。:-)

细分会是一个问题,但并非不可能解决。它非常复杂。但是当你清理完图像后,应该可以计算出两条线。一行接触每个字母的底部,第二行接触顶部。然而,好的验证码不会再将字母放在同一行上,但那些不太好的验证码只需沿着这些行就可以破解。(猜测?ReCAPTCHA 将字母放在两行之间!)对于两行,您知道第一个字母将从左侧开始,因此您可以尝试在那里覆盖所有 52 种可能性,直到找到匹配项。找到一个后,向右移动寻找第二个。进一步直到您读完所有信件。有两条线来引导您,您不需要完整的盒子。

字母往往使用恒定的宽度和高度比率。通过两行,您可以计算出完整字母的高度,从而很好地估计匹配的宽度。

尽管如此,制定正确的算法来计算这一切对于我糟糕的数学技能来说有点太多了。你需要一位专业的数学家来破解这个算法。

我对您的问题的回答:“即使有很多资源和时间,这些问题是否真的很棘手?”是指出这就是验证码工作的原因。

我的理解是验证码的目的是证明你是人类而不是垃圾邮件机器人。reCAPTCHA 是对这一主题的新颖尝试,因为它们拍摄的图像代表的是 OCR(光学字符识别)引擎无法解析的文本。在这种情况下,人和机器之间的区别在于,专门的算法试图解释该图像并失败,而“正常”人具有以一致的人类方式解释文本的内在能力。话虽这么说,未来我们希望有人能提出更好的 OCR 引擎,以便在数字化世界信息时需要更少的人为干预。我们希望有人能够针对这个特定问题提出一个易于处理的解决方案。

从您的角度来看,试图让盲人更容易使用验证码(他们仍然需要证明自己是人而不是垃圾邮件机器人),社区需要意识到这个问题,并找到一种方法来识别人们的身份一种不太以视觉为中心的方式。

验证码的引入无疑使视障人士更难访问网络,我同意您的说法,这是一个值得更多关注和关心的重大问题。然而,虽然验证码在流行网站上可能并且已经被不一致地绕过,但我认为这对于有需要的人来说不是一个可行的长期解决方案。事实上,验证码变体目前出现在 Facebook、Google、MySpace 等网站上的那一天。能够可靠且持续地被打破的那一天,它们将变得过时并被放弃,因为它们要么是相同解决方案的更强变体,要么是全新的解决方案(正如您所暗示的,区分图片中的猫和狗一直是一种流行的替代趋势)。

当谈到在线无障碍时,我认为残疾人现在最需要的是宣传。越多的人联系软件公司、开源组织和标准机构并公开谈论这一需求,就会提高更多的认识,并且(希望)会导致代表开发社区采取更多行动。最终,如果看到 Google 或 Facebook 等网站为其视障用户提供替代访问方法,那就太好了。

抛开理想主义不谈,我认为寻求其他途径是富有成效的,就像你提到的验证码志愿者网络一样,甚至可能为那些有相关残疾的人开发像 OpenID 这样的东西作为通用表单验证通行证。

至于您问题的技术方面,我认为仅凭额外的处理能力并不能让您可靠且一致地破解验证码。垃圾邮件中蕴藏着大量金钱,您可以确信,阴暗的 SEO 公司和垃圾邮件发送者都拥有大量服务器可供使用。正如 Johannes Rössel 提到的,如果您想了解更多有关如何完成此操作以及技术难度所在的信息,请研究光学字符识别 (OCR) 并查看高流量网站上发生的各种数字/字母倾斜。

这个相关的SO问题 其中有很多好主意,包括 DEFCON 谈话 声称使用多个 OCR 和投票破坏了许多简单的验证码。这提出了一种候选解决方法:将问题分布在多台服务器上,每台服务器并行运行一个或多个 OCR 工具,收集结果,并采用最流行的答案。欢迎评论。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top