0

我目前正在做一个小型即时通讯项目。到目前为止,一切进展顺利。

唯一的问题是安全性。当有人登录时,会设置 2 个 cookie。

1) Name: loggedin; Value: {username}  
2) Name: mvc; Value: {userSecretKey}  <-- pretty useless

这些是我使用的 cookie,因此我可以设置下一页。但是,我相信有更好的方法来做到这一点。不,我不想使用会话,因为我有“记住我”功能。

有人可以自己设置 cookie 并“登录”而无需实际登录。

有什么更好的方法来设置它?也许某种变化的关键?

4

2 回答 2

1

我建议将 PHP 会话与纯粹用于记住我功能的 cookie 一起使用。你可以这样设置:

  1. 用户登录
  2. 您将用户 IP 和 Useragent 存储在会话中
  3. 如果启用了记住我,则使用用户 ID、唯一随机 ID + 用户的 IP 和用户代理创建一个新的数据库条目,然后添加一个引用唯一随机 ID 的 cookie。
  4. 每次访问会话时,请检查请求 IP 和 Useragent 是否与该人登录时在会话中最初设置的匹配。
  5. 当用户在关闭浏览器后返回时,只剩下记住我的 cookie,将请求 IP 和 Useragent 与数据库中的进行比较
  6. 如果它们匹配,则自动将它们重新登录。
  7. 用户玩得开心。

干杯!

于 2013-06-12T01:55:17.783 回答
0

即使具有“记住我”功能,您仍然可以使用 PHP 会话。您只需要使用用户 ID 或用户名设置 cookie,然后,如果他们没有登录并且 cookie 存在,则从 cookie 中读取他们的信息并登录。

让您的逻辑检查用户是否已登录,检查已登录用户的活动会话。如果它不存在,则重定向用户登录。在您的登录逻辑中,检查是否设置了“记住我”cookie。如果是,请使用 cookie 登录用户。如果 cookie 不存在,请提供登录表单。

对于安全位,您可以使用在用户登录时重置的密钥。它是否可以被劫持,是的,但是如果您不断更改密钥/令牌,则劫持窗口应该很小。

于 2013-06-11T03:14:54.967 回答