所以,我创建了一个身份验证系统。为任何类型的安全漏洞倾注了它并测试了它的废话。我认为它相当安全,但它有一个“不同”的设计方面,这在 Web 身份验证系统中并不常见。
基本上,我想做到这一点,这样就可以在不跟踪每个用户会话的情况下完成身份验证。这意味着数据库上的负载更少,扩展和缓存也很简单。以下是服务器保存的“秘密”:
- 私钥保存在应用程序的源代码中
- 为每个用户保留一个随机生成的盐
为了使其无会话,但不容易伪造cookie,这是我的cookie的格式
expires=expiretimestamp
secret=hash(privatekey + otherinfo + username + hashedpassword + expires)
username=username
(otherinfo例如 IP 地址、浏览器信息等,以及hashedpassword=hash(username + salt + password + privatekey)
我的理解是伪造登录cookie(不破解密码)需要:
- 对应用程序的源代码访问,或一种诱骗它吐出私钥的方法
- 对数据库进行只读访问以获取 salt 和 hashedpassword
而传统的会话方法需要:
- 对数据库的写入和读取访问(注入会话,或欺骗 Web 应用程序为您执行此操作)
- 可能访问源代码,具体取决于它的工作方式
无论如何,这对任何人来说似乎都过于不安全了吗?我有什么方法可以改进它并使其更安全(同时保持无状态/无会话模型)?是否有任何现有的身份验证系统使用这种无状态模型?
此外,哈希方法基本上可以是任何东西,从 SHA256 到 Blowfish