这是我第一次创建这样的程序。这个方法安全吗?我感觉应该还有其他措施来确保用户的有效性。
没错,它是安全的,但你应该采取预防措施来防止不安全的情况/攻击。
你所描述的机制没有任何问题。但实现是不完整/不具体的。你必须考虑密码存储和登录过程中要使用的程序。
针对投诉,以下是OWASP关于身份验证/会话的一些问题。
1. 在使用哈希或加密进行存储时,凭据是否始终受到保护?
是的,请将用户密码存储为盐值哈希。
2. 是否可以通过弱账户管理功能(例如,账户创建、更改密码、恢复密码、弱会话ID)猜测或覆盖凭据?
不行,这些功能应该受到安全问题/电子邮件链接的保护。
3. 会话ID是否在URL中公开(例如,URL重写)?
不应该。
4. 会话ID是否容易受到会话固定攻击的攻击?
不应该,除了登录之外,不允许用户通过任何方式设置他们的会话ID。
5. 会话ID是否超时,用户是否可以注销?
在用户没有指定“保持登录两周”的情况下,会话应该很快过期。
6. 成功登录后,会话ID是否进行了轮换?
是的,使用 session_destroy()
和 session_start()
将实现此目的。
7. 密码、会话ID 和其他凭据是否仅通过 TLS 连接发送?
当然。
最终,您必须考虑您将要处理的数据类型。永远不要让某人获取用户的密码,因为这可能会危及他们在其他地方的数据。但是,如果您正在运行 colorakitten.com,请不要因被劫持的会话而失眠:“哦,不,有人黑了我的帐户并且把我的小猫变色了。”
阅读:PHP 会话安全
任何人获取您的会话cookie,都可以以您的身份登录。如果将会话绑定到IP地址,则更加困难。但是这可能会给那些具有动态IP地址的人带来问题。由您决定是否值得这样做。
您可能还想将用户名存储在会话中,以便为用户正确定制任何页面。您所描述的是“安全”的,但是如果不知道您正在做什么,很难评估应用程序的安全性。