【发布时间】:2012-12-17 08:12:17
【问题描述】:
我正在编写一个配备“记住我”的登录表单,到目前为止,我阅读的教程(部分是为了确保我做对了)都说要将加密的密码存储在cookie 和用户名。然后,每次 PHP 检查当前用户是否未登录时,检查他们的 cookie 并查找这些值。如果用户名与密码匹配,您就进入了。
对我来说,这是一个巨大的安全漏洞。如果有人要破解数据库或以某种方式访问加密密码,他们甚至不需要破解它们。只需设置您自己的 cookie 即可。我是正确的,还是只是偏执?
我的登录系统使用会话来跟踪当前用户 ID,并使用 1/0 进行快速登录/注销检查。用户无法编辑会话 AFAIK,因此这是安全的(如果不是,请告诉我)。我正在考虑将会话 ID 存储在 cookie 中,以便稍后恢复它,但这也不安全。
我非常关心我的用户的安全,如何在保持网站正常运行的同时妥善保护他们的信息?
【问题讨论】:
-
我不会存储加密密码,只是将 user_ID 存储在 X 天后过期的 cookie 中。对于“敏感”区域(例如帐户/个人资料管理),如果他们没有有效的 $_SESSION(您应该在他们登录时设置),您可以要求他们登录。
-
如果将会话 ID 存储在 cookie 中“不安全”,您当前如何存储它?
-
@georgefox 目前,我没有将会话 ID 存储在任何东西中,我只是说记住我功能的可能性。
-
理论和想法:我只是将会话的 cookie 过期时间设置为默认时间,然后如果用户选中“记住我”选项,则使调用用户会话的 cookie 持续存在更长。
-
@Jaxo,为了让您的会话正常工作,客户必须不断向您发送他或她的会话 ID。这几乎总是通过在 cookie 中设置会话 ID(例如 PHPSESSID)来完成,客户端将每个请求发送回您的域。这一切都由 PHP 在内部处理,并且可以在 php.ini 中进行配置。您可能没有明确地对会话 ID 做任何事情,但 PHP 正在为您将会话 ID 存储在 cookie 中。
标签: php security login remember-me