说数据库表中的持久性cookie的名称是pcookies有以下的列:
- cookie_id(CHAR)
- USER_ID(INT)
- 到期(DATETIME)
- 盐(CHAR )
Cookie创建步骤:
- 成功登录后,在数据库中创建一个唯一的ID下的cookie记录。您可以使用$ token = uniqid($ user_id,TRUE)和$ salt = md5(mt_rand())来生成hash_hmac('sha512',$ token,$ salt)。
- 在数据库中存储'用户ID','过期时间'和'salt'以及'cookie id'。
- 在cookie中存储'cookie id'和'token'。
认证步骤:
- 如果发现一个永久性的Cookie,首先检查记录是否在数据库或不可用。
- 如果记录可用,则检查cookie是否过期。
- 如果cookie未过期,则通过$ cookie_id == hash_hmac('sha512',$ token_from_cookie,$ salt_from_db)验证Cookie ID。
- 一旦cookie被验证,将其从数据库中删除并根据上述cookie创建步骤创建一个新的cookie。
- 如果发现cookie无效,请清除设备中的cookie并从数据库中删除用户的所有其他cookie记录,注意关于盗用企图的用法并继续进行手动登录过程。
注:
- 当会话可用,忽略检查的cookie。
- 注销后,清除cookie以及数据库记录。
- 绝不允许用户执行敏感请求,如密码更改或从持久cookie登录中查看信用卡信息。调用密码登录并在会话中添加一个标志以允许所有的前进操作。
我相信几乎所有人都记得我的特点已经是vul易受饼干偷窃。窃取用户的cookies通常非常困难,除非您的网站存在XSS漏洞,这本身就是一个非常重要的漏洞。 – mellamokb 2012-03-27 13:49:37
这里有一些很好的参考文献http://stackoverflow.com/a/3128997/46675 – 2012-03-27 13:53:48
@mellamokb这是真的吗?出于某种原因,我出于某种原因想象人们将某些东西连接到我的网站并拦截所有传输的Cookie(我知道这很愚蠢),这就是为什么我删除了旧系统将其密码存储在cookie中的原因(又是一个糟糕的系统,我会无论如何,都不会再使用它:P)。是否只有XSS可以通过? – 2012-03-27 16:57:51