首页 新闻 会员 周边 捐助

图片验证码的安全问题

0
悬赏园豆:10 [已解决问题] 解决于 2009-08-27 10:06

网上看了一些图片验证码的例子,发现其中的处理过程会把验证码保存到session中,以便其后的验证

session不是由cookie实现的吗?读一下cookie不是就知道验证码了?请问这样安全吗?

野蛮的主页 野蛮 | 初学一级 | 园豆:165
提问于:2009-08-26 14:51
< >
分享
最佳答案
0

Session是基于服务器端的,但是原理是由cookie实现的,如果是session,那服务器会发送一个唯一标识符给客户端cookie,但是服务器端会有个类似hashtable的全局变量,以键值对的形式存储在服务器端内存里。

如果是完全基于的cookie实现,那么在服务器端就不会有任何的存储。

验证码的实现安全级别最高的实施办法是使用session实现,只是在客户端发送一个cookie(验证码上数字加密后的字符串),但是服务器端对应的session内存储没加密的值,这样,在每次提交验证的时候,将服务器端的没加密的字符串在使用MD5加密后再与cookie字符串匹配,匹配成功即为正确,否则验证错误。

这个方案的漏洞在于只要用户截取一个cookie,然后模拟,只要在服务器端不重启(不丢失session)的情况下,就可以实现spam。

最好的方式是在cookie里面再加上时间,只要过了这段时间,验证码就失效

当然验证码还有问题,当在同一浏览器里同时打开两个含有验证码的页面,那么你再回到前一个打开的页面,验证码被后一个冲刷,这样用户的验证码也不正确。

收获园豆:3
Keep Walking | 初学一级 |园豆:73 | 2009-08-27 09:11
贸然结贴了....搞错了.. 你的观点中的"在每次提交验证的时候,将服务器端的没加密的字符串在使用MD5加密后再与cookie字符串匹配,匹配成功即为正确,否则验证错误" 是否搞错了...不是多此一举...增加了危险吗?
野蛮 | 园豆:165 (初学一级) | 2009-08-27 10:13
没有啊,md5加密是不可逆的,只有你对用户输入的进行md5后再对比字符串,才能知道他是否输入正确
Keep Walking | 园豆:73 (初学一级) | 2009-08-28 15:57
其他回答(4)
0

session是session

cookie是cookie

估计你的这个图片验证码的原理是保存在SESSION里,应该和COOKIE没有关系

Yuanet | 园豆:32 (初学一级) | 2009-08-26 15:37
0

两者之间有很大区别,首先Session是基于服务器端的,在用户访问时给每一个用户分配一个SessionID;而Cookies是基于客户端的,数据是保存在C盘的一个Cookies文件夹中,它的安全性远远低于session。

收获园豆:2
sl2008 | 园豆:407 (菜鸟二级) | 2009-08-26 15:39
0

你会理解为Session是由Cookie实现的,是因为通常在Cookie中带了一个SessionID,然后服务器根据这个SessionID找到具体的Session,所以说并不是Session中的数据都在Cookie中

收获园豆:5
Gray Zhang | 园豆:17610 (专家六级) | 2009-08-26 20:00
言简意骇,一语中的..小弟听完顿觉恍然大悟.. 谢谢!
支持(0) 反对(0) 野蛮 | 园豆:165 (初学一级) | 2009-08-27 10:15
0

加密后存于session,读取时在解密

红尘中迷茫 | 园豆:60 (初学一级) | 2009-08-26 22:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册