安全地验证用户身份的最佳方法是什么?
到目前为止,我一直在想:
$SALT
并将$logged = md5($hashed_password.$SALT)
存储到数据库中;注销时删除。$logged
存储到Cookie中(如果用户选中“记住我”)。设置$_SESSION['user'] = $logged;
$_SESSION['user']
;如果没有,请检查cookie,如果数据不匹配,请重定向到login
页。有什么风险?
答案 0 :(得分:2)
我可以在现有框架中看到的唯一问题(我非常喜欢)是$logged
可能会发生冲突。
两个有效的用户登录在数学上不可能产生相同的哈希值。所以我只想确保开始在Cookie中存储用户id
或其他一些独特的信息。
您可能还希望保留$logged
放入数据库的时间戳,以便您可以在x
天/周之前运行清洁查询。
答案 1 :(得分:1)
首先不需要做
Store $logged into a cookie (If user checked "remember me")
启动会话应该是你应该在index.php(被执行的文件)之上放置session_start()
的第一件事。这样,默认情况下,无论用户是否登录,都会在用户浏览器上创建cookie名称“phpsessid”。此cookie的值是唯一的,您可以在登录后识别用户。因此您不需要为此目的创建任何其他cookie。
答案 2 :(得分:0)
第一步有点矫枉过正,因为$_SESSION['foo']
在会话的生命周期中基本上是客户端。我只是为每个用户存储一个盐渍和哈希的密码,并使用日期或其他伪随机因素进行盐析。
如果用户清除其Cookie或会话过期,则设置cookie可能会失效。这将使用户登录(根据您的数据库)实际上他们不是。
我坚持只使用$_SESSION['foo']
和Cookie,并将数据库从登录过程中移除。
答案 3 :(得分:0)
在第一点,你提到它在用户登录时创建随机SALT字符串,并在用户注销时清除它。
主要问题是你必须在页面的每个重定向中检查是否存在SALT字符串。因此它在数据库服务器中产生了大量流量。
是的,这对于已登录或未登录的结帐用户非常有用。
但是,如果长时间后Salt字符串保留在数据库中,登录后客户端计算机出现电源故障。
第二点是cookie中的用户身份验证,它不安全。客户端可以在浏览器中轻松显示身份验证cookie
在会话中存储身份验证的第三点,它意味着在服务器端创建会话变量并将其存储在服务器端的文件中。它非常安全,然后将其存储在cookie中。
最佳的身份验证方法是将您提到的第1点和第3点结合起来。
答案 4 :(得分:0)
我可以看到一个问题 - 对于同时在多个浏览器中加载您网站的用户来说,您的解决方案听起来很烦人。