使用其哈希密钥在客户端验证验证码是否安全?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用其哈希密钥在客户端验证验证码是否安全?相关的知识,希望对你有一定的参考价值。

我经常使用验证码来保护表单。到目前为止,出于显而易见的原因,我仅在服务器端检查用户输入的验证码解决方案。

对于所有其他表单字段,我在客户端上进行javascript验证,因为这样更快,更用户友好; (当然我在服务器端进行第二次检查),但对于验证码字段,我只是检查它是否已填写。

我的问题:使用验证码代码的哈希密钥(例如MD5)进行客户端JavaScript验证是否安全?使用哈希键执行此操作不会向机器人显示验证码本身,并且应该非常安全,对吧?

但也许我对这个想法完全错了...感谢您的见解!

答案

足够安全我会说,但这可能有助于OCR机器人检查他们是否正确无需在服务器上试试运气并冒失去当前验证码的风险(因为如果提供的错误答案并且赢得了',服务器会使代码无效'给你第二次机会再次尝试使用相同的验证码)。

假设OCR机器人无法确定验证码的最后一个字母是小写L还是“1”数字?在没有客户端验证的传统验证码中,机器人只是试试运气,如果它猜错了服务器记录故障并重新发送一个完全不同的验证码,那么OCR必须重新开始。

现在想象一下上面的场景,但是通过客户端验证,这里的机器人有一种方法来验证他们是否有正确的答案而不通知服务器,所以在这种情况下,如果机器人不确定,它会尝试所有的可能性反对哈希,只提交正确的答案。基本上,这使得机器人能够在不告诉服务器的情况下犯错,而无需重新开始。

最后,我没有准确的数字,但即使每次使用不同的盐,取决于可能的数量(如4个字母数字字符,不区分大小写),可能会以合理的数量强制每一种可能性没有制作OCR的时间。为了缓解这种情况,您应该使用散列的多次迭代,以便在计算上难以尝试所有可能的答案。

另一答案

听起来很可行,但你应该考虑使用长而随机的盐来防止基于预先计算的简单攻击。

更正式地说,你必须发送图像,长随机盐和哈希值。然后,在客户端,您将计算与salt连接的输入文本的哈希值,并将结果与​​哈希值进行比较。

由于长的随机盐,攻击者的预先计算的集合必须非常大,以反映所有可能的盐值。

此外,忘记MD5,因为它被认为是不安全的。使用更强的哈希函数。

另请注意,这只会增强用户体验(在错误的验证码的情况下不需要POST页面),但绝对不能只在客户端进行。实际验证必须在服务器上完成。

以上是关于使用其哈希密钥在客户端验证验证码是否安全?的主要内容,如果未能解决你的问题,请参考以下文章

Linux之SSH安全,使用密钥对验证

是O.K向客户端发送密码哈希?

《SpringSecurity框架专题》-06验证码认证

配置sshd服务的安全密钥验证方式

SpringBoot 中注解方式的拦截过滤

实战证明LINUX系统下密钥对验证的安全性