我正在尝试为用户编写一个简单的 HTTP 记住我的身份验证系统。
我的用户可以这样表示
{
"email" : "foo@bar.com",
"password" : "8EC41F4334C1B9615F930270A4F8BBC2F5A2FCD3" // sha1 hash of password
}
所以我的想法是我需要创建一个具有无限期(非常长)到期时间的 cookie,它将保存某种类型的信息,使我能够从数据库中获取用户,从而登录用户。
我的第一个想法是将email:password
字符串简单地存储为 cookie。我认为这会很好,因为除了用户本身之外,没有其他人可以真正生成这种类型的信息,而且我可以通过简单地比较username
和password
基于数据库中的内容来轻松检索用户。
但是后来我觉得这不是很好。它将密码摘要有效地转换为第二个密码,该密码以明文形式存储并在每个请求中通过网络传递。
所以我想也许我可以在signature
每次用户登录时生成一个,这基本上是一个随机哈希,直接存储在数据库的用户对象中。
用户登录,它生成这个签名并存储,cookie 保存这个签名。每当您访问该网站时,该网站都会检查哪个用户具有该特定签名并将用户登录。注销将有效地删除 cookie,新登录将生成一个新的随机签名。
这种方法是否考虑到任何其他漏洞?
我知道,我可能应该使用已经为此制作的库,但这只是网络安全的一个简单练习。