我经常使用验证码来保护表单。迄今为止,由于明显的原因,我只在服务器端检查用户输入的验证码解决方案。
对于所有其他表单字段,我在客户端进行javascript验证,因为这样更快且更用户友好;(当然,我会在服务器端进行第二次检查),但是对于验证码字段,我只检查它是否已填写。
我的问题: 通过使用哈希密钥(例如MD5),在客户端JavaScript验证中使用是否安全?使用哈希密钥进行验证不会向机器人透露验证码本身,应该相当安全,对吗?
但也许我的想法完全错误... 感谢您的见解!
我经常使用验证码来保护表单。迄今为止,由于明显的原因,我只在服务器端检查用户输入的验证码解决方案。
对于所有其他表单字段,我在客户端进行javascript验证,因为这样更快且更用户友好;(当然,我会在服务器端进行第二次检查),但是对于验证码字段,我只检查它是否已填写。
我的问题: 通过使用哈希密钥(例如MD5),在客户端JavaScript验证中使用是否安全?使用哈希密钥进行验证不会向机器人透露验证码本身,应该相当安全,对吗?
但也许我的想法完全错误... 感谢您的见解!
听起来可行,但是你一定要考虑一个长而随机的盐来防止基于预计算的简单攻击。
更正式地说,你需要发送图像、一个长而随机的盐和哈希值。然后,在客户端,你将计算输入文本与盐连接后的哈希值,并将结果与哈希值进行比较。
由于有了长而随机的盐,攻击者的预计算集合必须非常庞大才能反映出所有可能的盐值。
此外,忘记使用MD5,因为它被认为是不安全的。使用更强的哈希函数。
还要注意,这只是可能会提高用户体验的东西(在验证码输入错误时无需POST页面),但绝不能仅在客户端执行。实际验证必须在服务器上完成。
s/doable/security flaw/
。 - zerkms