PHP持久登录不用担心窃取cookie

PHP Persistent Login not worry about stealing cookies

本文关键字:担心 cookie 登录 PHP      更新时间:2023-09-26

我对Charles Miller的文章"持久登录Cookie最佳实践"有点困惑,因为我不明白代码是如何防止有人窃取Cookie并在另一台计算机上登录的。

我看到并阅读了以下主题:

  1. https://stackoverflow.com/a/244907/3355243
  2. https://stackoverflow.com/a/30135526/3355243
  3. https://paragonie.com/blog/2015/04/secure-authentication-php-with-long-term-persistence title.2

在所有这些中,它解释了如何实现一个更安全的登录系统,尽管我不能弄清楚它如何防止窃取cookie,复制粘贴到控制台并使用它登录,即使处理两个不同的字段(系列/选择器和令牌)。

document.cookie="theCookieNameFromWebsite=theCookieValueFromVictim";

paragonie.com链接说:

CREATE TABLE `auth_tokens` (
    `id` integer(11) not null UNSIGNED AUTO_INCREMENT,
    `selector` char(12),
    `token` char(64),
    `userid` integer(11) not null UNSIGNED,
    `expires` datetime,
    PRIMARY KEY (`id`)
);

自动登录算法如下:

  1. 从令牌中分离选择器。
  2. 为给定的选择器获取auth_tokens中的行
  3. 用SHA-256哈希用户cookie提供的令牌
  4. 比较我们生成的SHA-256哈希值与存储在数据库中的哈希值,使用hash_equals()
  5. 如果步骤4通过,将当前会话与适当的用户ID关联

d'hell这如何防止我窃取cookie并使用它来登录我的受害者帐户?

它不阻止任何事情。仅用TLS(通常称为HTTPS)加密HTTP消息将确保没有人窃取用户的cookie(请注意,HTTPS 必须应用于整个域,而不仅仅是登录页面和"秘密"区域。

关于这个方法的作用,引用文章:

  • 攻击者只能在受害者下一次访问网站之前使用被盗的cookie,而不是在记住的会话的整个生命周期内使用。
  • 当受害者再次访问网站时,他将被告知被盗发生。

这样做的好处是,用户会尽快收到被盗的通知,而不是沉默地终止其他会话,或者更糟的是,将用户视为攻击者。