Javascript PHP持久登录不必担心窃取Cookie

Javascript PHP持久登录不必担心窃取Cookie,javascript,php,cookies,Javascript,Php,Cookies,我有点困惑,因为我不明白代码是如何阻止某人窃取cookie并登录到另一台计算机的 我看到并阅读了以下主题: 在所有这些中,它都解释了如何实现更安全的登录系统,尽管我不知道它如何防止窃取cookie、将粘贴复制到控制台并使用它登录,即使处理两个不同的字段(序列/选择器和令牌) 链接上说: CREATE TABLE `auth_tokens` ( `id` integer(11) not null UNSIGNED AUTO_INCREMENT, `selector` char

我有点困惑,因为我不明白代码是如何阻止某人窃取cookie并登录到另一台计算机的

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

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

    链接上说:

    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`)
    );
    
    自动登录算法类似于:

  • 将选择器与令牌分开
  • 获取给定选择器的auth_标记中的行
  • 使用SHA-256散列用户cookie提供的令牌
  • 使用hash_equals()将我们生成的SHA-256哈希与存储在数据库中的哈希进行比较
  • 如果步骤4通过,则将当前会话与适当的用户ID关联

  • 这怎么能阻止我偷饼干并用它把我登录到受害者的帐户上呢?

    这并不能阻止任何事情。只有使用TLS(通常称为HTTPS)加密HTTP消息才能确保没有人窃取您用户的Cookie(请注意,HTTPS必须应用于整个域,而不仅仅是登录页面和“秘密”区域

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

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

    这里的优点是,用户将尽快收到盗窃通知,而不是默默地关闭另一个会话,或者更糟的是,将用户视为攻击者。

    不是。在文章的底部,它明确说明了这种方法的两个额外优点。链接被断开我明白你的观点当然可以,但是为什么我需要两个字段呢?一个保存会话id的简单字段或一个令牌可以完成相同的工作。唯一的(改进)我认为这种方法的不同之处在于窃贼是否有权访问数据库。引用:有了这种故障保护机制,如果auth_tokens表不知何故被泄露,立即广泛的用户模拟就会被阻止。如果你只保留会话ID,并将其用作身份识别,当两个冒名顶替者出现时,你就无法知道冒名顶替者是谁您可以使用相同的会话ID cookie,或者即使存在冒名顶替者。
    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`)
    );