面向过程?面向对象?(TO BE OR NOT TO BE)- -| 回首页 | 2005年索引 | - -图形验证码

关于图形验证码的新做法- -

                                      

一般来说,PHP在做图形验证码的时候先是在SESSION保存验证码,同时利用GD库生成验证码图片,把用户提交和SESSION比较。那能否在客户端完成图形验证码的验证呢?能!因为JAVASCRIPT本身也可以完成MD5散列的计算。

附件[md5.js]
http://blog.blogchina.com/upload/2005-01-06/20050106153724915440.js

这样,我们在网页脚本里加一个隐藏字段,再用PHP生成网页的时候把用PHP的MD5()函数计算验证码的MD5散列,赋给隐藏字段,而用户的输入用JS文件中的hex_md5方法来计算散列,这样,和隐藏字段一比较,就知道是否正确了,也就完成了客户端的验证,当然,服务器端的验证也是必要的,不过这样感觉另类一些,酷一些!


- 作者: phper 2005年01月6日, 星期四 15:48 加入博采

Trackback

你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=505008

回复

- 评论人:oops

Sat Apr 02 15:31:17 CST 2005 

是在输入错的时候不用返回再输入一次~~

- 评论人:我

Thu Feb 24 16:53:13 CST 2005 

我在客户端保留的是md5后的散列,不是明文,因为javascript也可以计算md5,当然,我在服务器端也要判断验证码,我在客户端保留验证码得判断是为了防止输错还得去服务器白白响应一次,不是为了安全,安全还是由服务器端去验证得。

- 评论人:Nio

Thu Feb 24 14:10:26 CST 2005  作者Blog

因为你做 md5 之前的数/字母也需要让客户端 JS 知道,相当于把这个数/字母的明文留在了客户端,对于机器人也是防不住的,机器人是人写的,只要知道你的明文在哪里,就可以让机器人将此明文填入,更进一步讲,机器人完全可以不理会你的 JS,直接跳过,将登录数据提交,一切客户端都是不可信的!

- 评论人:phper

Wed Feb 23 09:29:48 CST 2005 

验证码的作用就是为了防止机器人程序,在客户端验证最大的担心是安全性,但我们用的是md5散列,当然,我知道你说的“失去了验证码的意义”的意思,我只是在做法上想说明在客户端也能验证,当然服务端也是必要的,不让可以构造form。

- 评论人:hapybird

Tue Feb 22 15:58:11 CST 2005 

呵呵,那就失去了验证码的意义了
验证密码就是不能让客户端能算的

评论内容: