用户登录安全性 - 本地cookie与会话

时间:2012-10-06 08:56:13

标签: security cookies login

我在这里读到了一些关于这个主题的答案,人们说使用会话更安全,只使用cookie,但我不明白这是怎么回事。

假设您正在使用会话,并且在客户端的计算机上仅存储会话ID。如果黑客获得访问客户端计算机的权限并窃取会话ID cookie,他几乎可以访问我网站上的客户帐户,对吗?

现在,如果您只使用本地cookie,并且像客户密码的哈希部分一样存储+与只有您的服务器知道的盐相结合,黑客仍然可以通过从他的服务器窃取他的cookie来访问他的帐户PC。

所以最后这两种方法没有区别,对吧?或者我错过了什么?

3 个答案:

答案 0 :(得分:3)

你是对的,如果一个黑客获得了对你电脑的完全访问权限,你就会被填充,直到会话在服务器端无效为止。

如果您只依赖于会话的cookie,那么如果您使用会话ID或用户凭证的哈希加上该用户独有的盐,那么这并不重要。它们是等效的,只要您可以调整服务器上的salt以使cookie值无效。通常,您会应用两种盐:一种是针对每个用户定义的,另一种是适用于所有用户的。这样,如果需要,您可以使所有用户的所有会话无效,或者只选择用户。

然而,有充分的理由不使用cookie进行会话:防止跨站点请求伪造(XSRF)。例如。如果您访问攻击者的网站,它会在您银行的网站上调用一个页面,并将资金转出您的帐户。如果您的银行网站使用Cookie进行会话,它会成功登录,因为浏览器会自动将会话Cookie传递给网站。

避免这种情况的方法是在请求的有效负载中传递会话ID而不是cookie,并且在服务器端,只查看有效负载中的会话令牌以确定会话,而不是cookie

答案 1 :(得分:1)

您缺少的是cookie,数据库和会话中必须有team play

要获得相当多的安全性,请执行以下步骤:

  1. 当用户使用“记住我”选中成功登录时,除标准会话管理cookie外,还会发出登录cookie。

  2. 登录cookie包含用户的用户名和来自适当大空间的随机数(此处为“令牌”)。用户名和令牌作为一对存储在数据库表中。

  3. 当未登录的用户访问该站点并提供登录cookie时,将在数据库中查找用户名和令牌。

    • 如果该对存在,则认为用户已通过身份验证。使用的令牌将从数据库中删除。生成一个新令牌,使用用户名存储在数据库中,并通过新的登录cookie发送给用户。
    • 如果该对不存在,则忽略登录cookie。
  4. 仅通过此机制进行身份验证的用户不得访问某些受保护的信息或功能,例如更改密码,查看个人身份信息或花钱。要执行这些操作,用户必须首先成功提交正常的用户名/密码登录表单。

  5. 由于此方法允许用户从不同的浏览器或计算机中记录多个记录,因此提供了一种机制,供用户在一次操作中擦除所有记住的登录。

  6. 这来自Charles Miller的article,“持久登录Cookie最佳实践”

答案 2 :(得分:1)

只是为了回答您的问题,仅此而言,会话更安全,因为存储在客户端(会话ID)中的数据仅在黑客自动过期之前的一段时间内可用。但是,如果您在客户端(作为cookie)保留登录信息的任何部分,只要它们不被用户更改,它们就是有效的。您甚至可以按每个请求重新生成会话ID,以尽可能缩短会话ID的生命周期。

[编辑]

让我们调用存储在客户端The Key中的信息。它可以是会话ID或散列登录信息。使用此密钥用户可以验证他的请求。现在,如果其他人窃取The Key,他可以做任何用户可以做的事情。冒名顶替者不需要解密The Key以便使用它,只要他可以复制它,它就可以。阻止冒名顶替者的唯一方法是使The Key无效。所以只要可以复制,你的密钥是什么并不重要。重要的是你何时以及如何使它失效。