最近我试图“开发”我自己的登录系统。我相信有人之前已经这样做了,但这是它如何运作的总结。
当然,还有一个“成员”表,其中包含ID,用户名,bcrypt加密密码,电子邮件和其他数据等数据。
其次,还有另一个名为“sessions”的数据库,它包含一个自定义会话哈希和用户ID。
现在,当有人登录时,在完成所有检查之后,脚本将生成一个唯一的32个字符长哈希,并将其存储在用户的会话信息中。相同的会话哈希将与登录用户的ID一起插入“sessions”数据库。
当它检查会话是否有效时,它将检查数据库中是否存在该会话。如果是,则检查用户的上一次操作是否超过15分钟。如果是,则会话已过期,并将其从数据库中删除,从而将用户注销。
我想听听您对此系统的看法,以及如何改进它。
谢谢!
答案 0 :(得分:0)
你可以做很多事情,但你的系统非常正确。我唯一可以建议的是将远程用户的IP地址存储在会话表中。如果您不这样做,那么您的应用将很容易被会话盗窃。如果您确保会话哈希始终通过SSL发送,则这不是问题,但如果没有,则可能有人可以获取该32个字符的会话哈希并使用它来窃取某人的会话并获得对系统的访问权限登录。
因此,您需要检查以确保在会话表中检查有效会话时,还要检查IP地址是否仍然匹配。唯一的缺点是,对于一些有效的用户,他们的IP地址可能会在会话中间发生变化,从而在他们做某事时将其记录下来。现在,随着宽带越来越受欢迎,这不是一个问题。
答案 1 :(得分:0)
我假设您正在使用SQL数据库......
只要您正在执行所有基本安全检查(例如转义用户输入和存储上次使用的IP地址),此系统似乎应该没问题。如果IP在会话中间发生变化,则可能会发生可疑事件,因此请将用户注销或强制他们重新进行身份验证。
答案 2 :(得分:0)
您应该做的最重要的事情之一就是至少在登录时多次更改SessionID。哈希必须非常随机。
另一种保护机制是锁定用户,例如他/她输入三次错误的密码时为10分钟。