我正在使用php制作注册/登录系统。我想我已经完成了所有初始登录工作(使用salt哈希密码,在db中存储...)。
我的问题是关于在初次登录后让用户登录页面。我理解的方法是,一种方法是在服务器上有一个会话表,为每个用户存储一个随机唯一ID,并将该id存储在用户计算机上的cookie中。对于他们加载的每个页面,这种方式是在数据库中查找其会话ID。
我不明白这是怎么安全的?不能有人只是嗅到ID然后伪造那个用户。有人甚至可以尝试猜测ID。
我还读到,每次访问页面时ID都会更改。这如何提高安全性?它似乎只会减少任何ID的使用时间。
此外,如果使用“记住我”功能长时间存储会如何改变?
答案 0 :(得分:3)
您所描述的ID正是会话ID的内容,除了它是由php透明地处理的(浏览器将此会话ID与cookie一起传递)。
您所描述的安全漏洞正是firesheep利用的漏洞。您可以通过确保对站点的所有经过身份验证的请求都通过ssl进行嗅探来阻止会话ID被嗅探。这不仅包括登录,还包括经过身份验证的用户尝试访问页面的任何时间(这意味着浏览器将传递经过身份验证的会话ID)。
如果用户尝试不通过SSL访问某个页面,理想情况下应将其重定向到SSL页面并为其提供新的会话ID,因为旧的可能已被盗用。
答案 1 :(得分:0)
这样一个系统的关键是你不会随机生成密钥 - 你使用关于用户的事实,另一个客户端不知道的信息来生成密钥 - 比如用户的IP地址,用户 - 代理和会话ID。然后,您使用该密钥及其会话ID(由PHP透明处理)使用户进行身份验证。