在查看我们的登录系统以添加一些新功能后,我发现它不是很安全。 auth cookie是user id, stamp, version, PASSWORD IN THE RAW, and a cookie id
的加密。至少我可以说我不是那样做的人,以前的开发人员做过的。 (是的,我知道密码应该保存为数据库中的哈希而不是纯文本。原始开发人员就这样做了,我还没有修复它。)
所以我在这里和网上做了很多关于安全登录和安全cookie的阅读。我可以看到不安全地做这件事是多么容易。
关于网站
这是我的计划:
目标:
后端登录是安全的,持续时间更长。在办公室以外的有限登录
user gets page:
no auth:
have user sign in with username & pass
create new token
expires =
https on store: 30-60 min
backend in office: 5 days
backend remote: 30-60 min?
regular without remember me: session or 24 hours?
regular with remember me: 30 days
insert into user_session
set cookie
auth:
token in db:
set uid
generate new token, new expires, insert into DB, remove old?
upddate cookie
token not in db:
logout, requre sign in
table user_session:
uid
uid_as (for being 'logged in' as another user, admin feature only)
token
type
ip address
expires
stamp
cookie value: token|hash(token + user id, server key)
从我读过的所有内容中,我就想到了这一点。我觉得我错过了一些东西。除了在整个网站上使用HTTPS之外,我的计划是否有任何问题或使其更安全的方法? (它目前会引起一些问题,但我稍后会对此进行研究)
答案 0 :(得分:1)
听起来向前迈出了一大步 - 你的cookie值仍然可能被其他用户劫持,特别是如果用户没有logout
(销毁有关会话的数据库信息)。只是需要注意的事情。
如果您想立即支持多次登录,则需要为所有(不良计划)或每个会话的唯一令牌考虑相同的令牌。在后一种情况下,您需要将会话绑定到IP - 这也会削弱从另一台计算机欺骗令牌的能力。
对于关键交易(如果有),您也可以要求用户重新确认其密码(通过HTTPS)。