php - 我应该为多个设备创建多少个 cookie?

标签 php algorithm security cookies

我正在尝试创建一个 cookie 来让我网站的用户保持登录状态。我让这个人从多个设备登录。我可以为所有用户的设备创建一个相同的 cookie 吗?或者我应该为不同的设备存储多个不同的 cookie(以及为什么)


实际上,我认为在多个设备上为特定用户使用一个通用 cookie 没有任何问题。此外,该 cookie 不可更改。在用户更改密码之前,这将始终是固定的。我这样创建 cookie:

md5($password.$user_id.$username);

那个 cookie 是基于密码的,因为我想在他更改密码时注销他,否则他将登录到他已经登录的所有设备。

我这样做对吗?

最佳答案

密码哈希算法MD5已经开始被攻破,主要是抗碰撞性,还有轻微的原像抗性。参见 the Wikipedia article, in the security section .

因此,我不会将 MD5 用于任何稍微与安全相关的事情。与 SHA-1 的情况类似,它已开始被破解,所以我会使用 SHA-2如果您确实需要哈希算法。

您的方法存在的问题是您无法轻松地从单个设备撤销 token 。如果其他值已知,将密码作为算法的输入也可能使其容易受到哈希破解攻击。也不要依赖您的方法保密,Kerckhoffs's principle指出“密码系统应该是安全的,即使系统的所有内容( key 除外)都是公共(public)知识。”。

您的方法的另一个问题是您的哈希算法需要对密码进行明文访问,这可能表明您存储的密码不安全。总之ensure you are using bcrypt for password storage .当然,您可能正在创建 cookie 并在用户输入密码时存储它的服务器端版本,但是鉴于您希望在密码更改时自动使 cookie 失效,我认为不是。

使用 token 管理设备的最安全方法是为每个设备生成一个 128 位的随机 token ,并将使用 SHA-2 散列的该 token 存储在您的数据库中。确保使用 CSPRNG 生成 token 。

因此:

    Cookie value: 128-bit token
    Database value: SHA-2(128-bit token)

请注意,这种位强度的值不需要盐。然后,当用户更改密码时,您只需删除该用户的所有服务器端 token 。此外,您将能够允许用户单独撤销不同设备的 token ,而无需更改任何密码。

在服务器端进行散列的原因是为了在攻击者获得对您的 session 表的访问权限时减轻任何 session 劫持。

关于php - 我应该为多个设备创建多少个 cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38044482/

相关文章:

java - 如何减小 SHA1 的大小?

php - Yii 同时使用 mongo DB 和 MySQL

php - 需要 ext-mongodb ^1.5.0 symfony

php - 如何在设置前一个列表框值时设置选择框或下拉列表框的值

php - 谷歌图表; arrayToDataTable,如何指定列类型?

c++ - 计算满足给定条件的三元组

列出具有重复字母的字符串的唯一排列的算法

algorithm - 对 dijkstra 算法的困惑?

.net - .NET安全错误,访问外部API

php - Smarty Foreach 循环将 +1 添加到它打印出的类