博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

js判断验证码是否正确

Posted on 2012-01-11 17:24  PHP-张工  阅读(13795)  评论(5编辑  收藏  举报

在提交表单时,为了防止自动程序提交,一般提供有验证码。

一般都是在提交表单后在服务器端检测验证码是否正确,如错误则阻止表单提交。

为了提高体验,有的在Form的submit前使用ajax来提前检测验证码是否正确。

这样还要请求服务器,就想何不使用如下方法,来实现js在客户端验证。

步骤

页面加载时,加载验证码图片,和验证码密码。

验证码密码在服务器端生成,生成规则为 md5(验证码+固定随机码) 来生成。固定随机码只是为了防止md5暴力破解。

客户端在提交表单前使用js检测验证码是否正确。方法为:将用户输入的验证码加上固定随机码 在js使用md5运算后,与验证码密码比较,如不一样则验证码错误。阻止提交表单。

原理

此方法的核心原理就是利用了md5唯一性和无法反向破解的特性。

举一反三,此种方法也可验证其他用户输入。可能还可应用到 修改密码,验证密保等等。

可能你还很糊涂,不知道怎么表达清楚。举个实例。

实例

1 生成验证码 [5u6t9f]

2 将验证码存储在服务器端的session中,并生成 验证码密码[332AWGD] = md5(验证码[5u6t9f]+固定随机码[21EC2020])

3 客户端加载页面,页面中包含根据验证码生成的验证图片、验证码密码[332AWGD]、固定随机码[21EC2020]

4 提交表单前js通过同样算法 计算验证码密码=md5(用户输入验证码+固定随机码[21EC2020]) 计算出 新的验证码密码和系统的验证码密码[332AWGD]比较就可知道验证码是否正确了。

注意:此种方法只是为了优化用户体验,因为高手可跳过JS验证,所以在服务器端还必须对用户输入的验证进行检测。