用户
 找回密码
 入住 CI 中国社区
搜索
查看: 5814|回复: 6
收起左侧

CI验证码使用的注意事项

[复制链接]
发表于 2010-6-23 11:27:25 | 显示全部楼层 |阅读模式
在这网站学到不少东西,今天俺也来贡献下自己的微薄之力,谈谈CI验证码。
加入验证码为的就是增加网站安全性。
而CI_session最有名的就是Session写在Cookie中,
所以检验验证码有效性的时候,不能通过Cookie中的值和post过来textbox的值进行比对验证,会引发严重的安全漏洞。
譬如文章http://codeigniter.org.cn/forums/thread-5091-1-1.html中的验证码,非常美观好看,我现在也在使用,但是check的时候用的方法是CI的session。
用抓包工具直接可以看到存在客户端的cookie,例如
PHPSESSID=pfdp8i6egpsm7hm8nu991ok640; ci_session=a%3A5%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%22e755a1a47e3079e1580c837a1c1e5c36%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A9%3A%22127.0.0.1%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A50%3A%22Mozilla%2F5.0+%28Windows%3B+U%3B+Windows+NT+5.1%3B+en-US%29+Ap%22%3Bs%3A13%3A%22last_activity%22%3Bs%3A10%3A%221277258706%22%3Bs%3A9%3A%22auth_code%22%3Bs%3A4%3A%226255%22%3B%7D937bf4a55eba4c01be733d67faf4a596

%22%3Bs%3A4%3A%22 的意思是:s:4,应该是在CIsession array中的第几号
而接下来的6255便是验证码。
即便是把6255加密,也可以在客户端生成假cookie,发送旧验证码通过验证。

总结来说,验证码生成的值要不存在数据库里,回来取数据库的值进行验证,这样最安全。
要么用php原生Session(HEX老大已经封装好了),暂时觉得很安全。
用CISession配合验证码会死得很惨的。。。
发表于 2010-6-23 16:13:29 | 显示全部楼层
嗯,兽叫了~
发表于 2010-6-24 13:45:36 | 显示全部楼层
“总结来说,验证码生成的值要不存在数据库里”
到底是放在数据库里,还是不放在数据库里?
 楼主| 发表于 2010-6-25 17:00:50 | 显示全部楼层
sorry,表达能力有限,应该要放在数据库里
发表于 2011-12-31 10:59:21 | 显示全部楼层
感觉放在数据库里是不是效率很低
发表于 2012-5-30 23:54:23 | 显示全部楼层
无语的,验证码
发表于 2012-8-14 20:08:43 | 显示全部楼层
哦,还有此一说,受教了

本版积分规则