如果验证码不安全,可以使用什么?

时间:2010-05-21 08:43:09

标签: javascript security

据我从here读到,验证码不是100%安全的事实。可以用什么来代替验证码?作为一名程序员,您怎么看?如何解决这个问题?

编辑:感谢所有答案。

10 个答案:

答案 0 :(得分:7)

这是一个未解决的问题,随着时间的推移会变得更加未解决。 OCR工具越好,人与计算机之间的差距越小,将它们分开就越难。最终,计算机将与人类无法区分,然后游戏将会启动。

如果你的服务器想要确保一个人在TCP管道的另一端,那么就不存在最终不会被击败的图灵测试(并且可能永远不会有一个)。 CAPTCHA注定要失败,这只是一个问题。

当然,就人类身份验证而言,这并不意味着它已经全部结束。这只是意味着自动化图灵测试虽然方便,但却不是长期实现这一目标的有效方法。

答案 1 :(得分:6)

  • Captcha涉及人的反思(如计算,非常简单的问题等)。
  • Session tokens
  • 随机生成的隐藏输入,需要为null,在服务器端生成随机标识符,将其保留在会话中一段时间​​。如果输入已填充且不为空,那么它可能已由机器人填充,您的用户是否会填充隐藏的输入?

我认为这实际上取决于你试图控制验证码的使用。

答案 2 :(得分:5)

鲍里斯提出的建议的进一步解释:

  

随机生成的隐藏输入,需要为空

这个想法是你的表单包含几个不可见的输入,它们的类型可能不应该设置为隐藏,但它们应该对人类不可见(例如,设置宽度或高度为0)。这些字段的初始内容应为空。如果一个人填写表格,该字段将为空,因为人类无法看到该字段以便输入任何内容,但如果机器人填写表单,该字段将(可能)不为空,因为通常机器人只是盲目地在每个领域都输入一些东西。

因此,您可以根据此字段的内容是否为空来区分机器人和人类。

答案 3 :(得分:1)

虽然验证码可以被破坏,但 Capthca只会增加安全性 reCapthca 非常良好,并且训练有素的OCR如Tesseract打破它的成功非常有限。但是,有些服装使用Human Computation来打破便士。但这会使对您系统的攻击更加昂贵,这是您所希望的最好的。 密码学可以用暴力破解。所有密码哈希值都可以破解,但我们仍然使用它们,因为它使攻击者更难。

此主题中的大多数“解决方案”都是“Security Though Obscurity”,您应该对这些快速修复问题保持警惕。

答案 4 :(得分:0)

Captcha用于确定实际的人正在执行请求,而不是机器。 Captcha和类似验证码的系统将升级,破解它们的技术也将升级。

那你如何证明你是在与人而不是电脑交谈呢?例如,您可以要求用户参与聊天会话并进行小型会话。现在没有人工智能通过图灵测试。

所以答案是,没有一个系统是完美的。不要试图解决这个问题,但要设法减少这种影响。

答案 5 :(得分:0)

从长远来看,政府可以运行openid服务器作为公民的数字护照。 这将是一种识别人类和预防袜子的清洁方式。

答案 6 :(得分:0)

在我的网站上,我选择了简单的问题。我过去使用的一些问题:

  • 一个人的力量是什么?
  • 2 + 2是什么? (这个被黑了,所以不要使用它)
  • 此网站域名是什么?
  • 两个和两个的总和是多少?

其他一些好的可能是

  • 在此框中输入'stuff'作为垃圾邮件检查
  • 1337是什么样子的? (仅使用字母)
  • 当年是?

答案 7 :(得分:0)

我能想到的最好的方法是使用一些非常规的东西,比如一个特殊的隐藏字段,它应该是机器人会弄乱的空(或其他特定值)。

如果某个机器人制造商为您的网站调整机器人,您必须快速将验证码更改为不同的东西。它会(希望)在另一个机器人制造商为你的网站调整机器人之前花一点时间。

基本上,这是一种通过默默无闻的安全保护,必须经常改变才能保持模糊。

如果有人专门针对您的网站,则效果不佳。

答案 8 :(得分:0)

它只是一个想法,id在我的应用程序中使用并且运行良好

你可以用javascript或jquery在鼠标移动时创建一个cookie,在服务器端检查cookie是否存在,因为只有人类有鼠标,cookie只能由他们创建 cookie可以是时间戳或可以验证的令牌

答案 9 :(得分:0)

获取鼠标的坐标,确定坐标是否已更改,您可以确定它是否是机器人。

然后加密坐标数据。