|
在这网站学到不少东西,今天俺也来贡献下自己的微薄之力,谈谈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配合验证码会死得很惨的。。。 |
|