0

在这个时代,我们拥有不同的机器、设备和电话,但有时我们希望以自己的名字被人们记住。

我有一个网站,一个人应该能够在他当前正在使用的设备上检查“记住我”,并且可以在家里的所有设备上使用它。

目前我正在使用一个记住我的函数,它创建一个散列键,将它保存在 cookie 和数据库中。但是 - 当使用同一用户登录但在其他设备上时,数据库中的散列键被覆盖,因此第一台设备上的记住我功能已关闭。

我正在考虑创建一个会话表来保存不同的会话,(尽管它也可能为一个用户保存不同的会话)

所以问题:

如何使用 php.ini 为设备设置/生成唯一会话密钥。

因为我在不同设备上使用相同的浏览器,所以浏览器指纹不起作用。

任何人的想法?

当然,我需要一个安全的解决方案,防止将 cookie 复制到另一台设备或更改 cookie 信息(从您的用户到管理员)很重要。

4

4 回答 4

0

我会做会话表来存储所有会话。将用户 ID 和会话 ID 存储在 cookie 中,这样当用户回来时,您可以检查它们是否都在表中。如果是,他们不必重新登录。

于 2013-01-04T12:40:42.517 回答
0

基本思想是存储来自不同设备的会话 ID 并将它们绑定到一个用户。在数据库级别,这意味着您的用户表中没有“session_id”字段,而是一个包含“session_id”和“user_id”列的单独表。

请考虑会话固定和会话劫持的安全隐患。有关更安全的“记住我”系统的描述,请阅读以下文章:

http://fishbowl.pastiche.org/2004/01/19/persistent_login_cookie_best_practice/

http://jaspan.com/improved_persistent_login_cookie_best_practice

于 2013-01-04T12:43:59.513 回答
0

首先,使用哈希键而不是用户名不会增加任何额外的安全性。

只需使用其中包含用户名的 cookie。密码在那里是为了安全。

于 2013-01-04T12:33:50.727 回答
0

当然,我需要一个安全的解决方案,防止将 cookie 复制到另一台设备或更改 cookie 信息(从您的用户到管理员)很重要。

最终,这是在解决错误的问题。

防止这种情况的方法是:

  1. 到处使用 HTTPS。
  2. 通过 HTTPS 发送所有带有安全和 httpOnly 标志的 cookie。

而已。这与客户端真实性的问题有关。有一些技术可以阻止懒惰的攻击者(例如用户代理),但是这些技术中的任何一个都可以轻易地被欺骗。

于 2017-12-29T05:05:24.543 回答